Java从IoC到注解开发(1)

发布于:2023-01-11 ⋅ 阅读:(589) ⋅ 点赞:(0)

IoC是我们常用来讲对象的控制权转换到外部的一种做法,我们是基于Spring来进行使用的,我是在学习的时候使用了这个东西,从最复杂的讲道最简单的,这个东西并不难,重要的是去理解整个过程的实现

接下来我们开始说明一下IoC是个什么,IoC(控制反转),用俗话来理解,我们在后期维护如果更换了对象的名字,我们的维护难度就比较大,因为需要从新的编译、打包、测试等操作,而像我们经常使用的对象更是应该丢到一个配置文件中,动态的进行修改,这样的效率会大大的提高,不过屁事也会更多,原本写习惯了new的对象,现在要将对象包裹在配置文件中,所以Spring提供这样的一种配置,提供给各位开发者使用。

正式进入IoC中,我们使用Marven来管理项目,所以在pom.xml下我们需要导入spring-context的jar包,导入完成后,我们在resources下创建一个spring config的配置文件

这就是我们需要创建的配置文件了,创建完成之后,我们定义一个类和一个测试类 

我们对这个配置文件进行一些配置,这里需要介绍一下我们使用的Bean是什么,还是长话短说,官方语言太标准不好理解,我们就把它当做一个能够装载你需要声明对象的容器,声明在里面,后面调用就可以用了

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  
    <bean id="settingDao" class="com.itheima.SettingDao"/>


</beans>

id是作为一个唯一的表示,是需要和用这个对象时的getbean操作中的名字相同

class是作为代表要创建对象的路径,也就是类的路径

public class SettingDao {

    void S(){
        System.out.println("the secoundy running");
    }
}

我们在测试类中,我们需要配置一些其他的东西

ApplicationContext 这是一个接口,不能直接new,所以我们new了它的子类,代表把这个spring-config的文件,配置进去,下面就和我们平常创建对象的方法不同了,我们只需要调用getBean获取需要的对象名字,然后强制转换为当前这个类型,就可以直接调用下面的方法了

public class test {
    public static void main(String[] args) {
        ApplicationContext acc = new ClassPathXmlApplicationContext("Springconfig.xml");
        SettingDao  settingDao= (SettingDao)acc.getBean("settingDao");
        settingDao.S();
    }

}

获得结果 

这就是我们使用的当中对象的方法,还有一种就是在类中声明对象,然后调用当中的方法,也就是下面这种


public class ServiceDao {
    public SettingDao settingDao;

    public void setting() {
        System.out.println("the main is running ");
        settingDao.S();
    }
}

 我们像刚刚那样去调用肯定是会出错的,因为这是在一个类中又调用了一次获取对象,但是Spring就帮助我们解决了这样的问题,我们在配置文件中声明了property标签在bean标签中,这种行为我们称为依赖注入(DI)会用就行

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="settingDao" class="com.itheima.SettingDao"/>

    <bean id="serviceDao" class="com.itheima.ServiceDao">
        <property name="settingDao" ref="settingDao"/>
    </bean>
</beans>

我们把测试类也改了,改成测试这个的

public class test {
    public static void main(String[] args) {
        ApplicationContext acc = new ClassPathXmlApplicationContext("Springconfig.xml");
        ServiceDao  serviceDao= (ServiceDao)acc.getBean("serviceDao");
        serviceDao.setting();
    }
}

一运行,发现出问题了 

 不过这个错误,比较明显,说了我们这个类中没有一个setter方法

我们在原本的类中加入一个set方法

public class ServiceDao {
    public SettingDao settingDao;

    public void setSettingDao1(SettingDao settingDao) {
        this.settingDao = settingDao2;
    }
    public void setting() {
        System.out.println("the main is running ");
        settingDao.S();
    }

}

在测试一次发现成功了

注意:这里一样的serviceDao的id要和测试类中传进来的getBean中的名字相同,property中的name要和我们使用的setter方法中的名字相同,而后面的ref要和形参的名字相同,这样才不会报错

介绍了IoC中普通使用的方法,也是最复杂的方法,没有之一,名字对来对去的,很容易出错,后面补充简易的方法,这种刷一下就好了,知道有这么个东西就行

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到