Java从IoC到注解开发(1)

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈Demo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值