spring的IOC原理
作者:@kuaiquxie
作者的github:https://github.com/bitebita
本文为作者原创,如需转载,请注明出处:https://www.cnblogs.com/dzwj/p/16476074.html
控制反转(IOC)原型
之前,程序是主动创建对象!控制权在程序猿手上!
使用了set注入后,程序不再具有主动性,而是变成了被动的接受对象!
这种思想,从本质上解决了问题,我们程序猿不用再去管理对象的创建了。
系统的耦合性大大降低~,可以更加专注的在业务的实现上!这是IOC的原型!
IOC本质 控制反转loC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现loC的一种方法, 也有人认为Dl只是loC的另一种说法。没有loC的程序中,我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中, 对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了。
采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体, Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。 在Spring中实现控制反转的是loC容器,其实现方法是依赖注入(Dependency Injection,Dl)。
这个过程就叫控制反转: 控制:谁来控制对象的创建,传统应用程序的对象是由程序本身控制创建的,使用Spring后,对象是由Spring来创建的. 反转:程序本身不创建对象,而变成被动的接收对象.依赖注入:就是利用set方法来进行注入的. IOC是一种编程思想,由主动的编程变成被动的接收. 可以通过newClassPathXmlApplicationContext去浏览一下底层源码. OK,到了现在,我们彻底不用再程序中去改动了,要实现不同的操作,只需要在xml配置文件中进行修改, 所谓的IOC,一句话: 对象由 Spring 来创建,管理,装配!
beans.xml 基本代码:
测试类: // 获取 Spring 的上下文对象 ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
IOC创建对象: 默认使用无参构造创建对象 假设使用有参构造创建对象 1.下标赋值 2.类型(不常用) 3.参数名(常用) 在配置文件加载的时候,容器中管理的对象就已经初始化了
spring配置:
1.别名:
<alias></alias>
2.Bean的配置:
3.import: import 一般用于团队开发使用,可以将多个配置文件,导入合并为一个 代码:
<import resource="beans.xml"/>
<import resource="beans2.xml"/>
<import resource="beans3.xml"/>
标签自闭合: <p/>
依赖注入:
1.构造器注入 2.set方式注入(重点) 3.拓展方式注入
set方式注入:
完善注入信息:
<bean id="address" class="com.jing.pojo.Address">
<property name="address" value="北京"/>
</bean>
<bean id="student" class="com.jing.pojo.Student" name="">
<!--1. 普通值注入,value-->
<property name="name" value="小明"/>
<!--2. Bean 注入,ref:引用 bean 中的 id-->
<property name="address" ref="address"/>
<!--3. 数组注入,ref-->
<property name="books">
<array>
<value>红楼梦</value>
<value>西游记</value>
<value>水浒传</value>
<value>三国演义</value>
</array>
</property>
<!--4. list-->
<property name="hobbys">
<list>
<value>听歌</value>
<value>写作业</value>
<value>玩游戏</value>
</list>
</property>
<!--5. Map-->
<property name="card">
<map>
<entry key="身份证" value="123"/>
</map>
</property>
<!--6. Set-->
<property name="games">
<set>
<value>cf</value>
</set>
</property>
<!--7. null-->
<property name="wife">
<null/>
</property>
<!--8. Properties-->
<property name="info">
<props>
<prop key="学号">2022</prop>
<prop key="搞笑">小飞棍来喽</prop>
</