IOC(控制反转)与DI(依赖注入)总结
一、IOC控制反转
1、IOC即控制反转:
它不是一个技术,而是一种设计思想,在java开发过程中,控制反转意味着将设计好的java对象交给容器控制,会帮助创建对象,并将对象的管理(创建 维护 销毁)交给spring管理,在使用对象的时候将对象反转给使用方,而不是传统的在对象内部直接控制,也就是本该自己做的事情交给系统去做,我们只需要在配置文件xml中配置好,系统就会帮助实。
2、帮助理解:
1)谁控制谁,控制什么?
在在传统的设计中,程序员直接在java 对象的内部通过new 进行创建对象,是程序自动的去创建对象,而在IOC中 是有一个专门的容器来创建对象,即有IOC 来控制对象的创建。由谁控制谁:就是IOC容器来控制对象,控制什么:主要是控制了外部资源(对象或者文件等)的获取。
2)什么是反转,哪些方面进行了反转?
以前应用程序是程序员在对象中直接控制,直接获取依赖对象,而IOC中是由容器创建并注入依赖对象,依赖对像的获取进行了反转。
3、解决问题
传统应用程序由我们在类内部主动创建依赖对象,会导致类与类之间耦合度太高,而有了IOC容器后,把创建和注入依赖对象的权利交给了容器,由容器进行注入组合对象,所以对象与对象之间耦合度降低,使得程序的整个体系结构变得更加灵活。
二、DI依赖注入
1、DI即依赖注入:
组件之间依赖关系有容器在运行期决定,传统应用程序中当一个角色需要调用另外一个角色时是由调用者创建被调用者的实例,而在Spring中是由容器来完成对象的创建和注入(人:调用者,菜刀:被调用者 )
2、帮助理解:
1)谁依赖谁?
应用程序依赖于IOC容器。
2)为什么要依赖?
应用程序有需求,它需要IOC容器提供对象需要的外部资源。
3)谁注入?
由IOC容器来注入应用程序的某个对象。
4)注入的是什么?
注入的是对象所需要的外部资源(其中包括对象、资源、常量数据)。
3、依赖注入方式:
java 提供三种方式对象赋值方法:
1)通过set方法
2)通过有参构造
3)通过接口方式
spring依赖注入方式:
1)通过有参构造函数
<!--依赖注入方式1:有参构造-->
<bean id="user3" class="com.xxx.bean6.User">
<!--name属性注入-->
<constructor-arg name="name" value="zhansan"/>
</bean>
2)通过set方法
<!--依赖注入方式:set方法-->
<bean id="user4" class="com.xxx.bean6.User">
<!--name属性注入-->
<property name="name" value="lisi"/>
</bean>
三、两者的关系
他们是同一概念不同角度的描述,控制反转只是从容器控制对象这一层面理解,二依赖注入相对控制反转而言更加清楚,明确描述了被注入对象依赖IOC容器配置依赖对象。
四、简单的例子
求职者找工作,开始时是自已根据自己的能力需求,分析企业的要求对应着去投递简历,所有的环节都需要自己一步步完成,有了中介公司后,相当于个人和企业之间加入了第三方,中介管理了求职者与企业的资料,求职者只需要告诉中介自己的条件,想找一个怎样的工作,中介就会按照需求提供,提供的工作在不满足需求的情况下不接受,整个过程都不用自己控制。