1、概述(Inversion of control, 控制反转)
1.1 思想
IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。
a、把程序对象设置到IoC/DI容器的配置中,作为Bean来统一管理
b、由IoC/DI容器来管理Bean的创建、实例化
c、把程序之间的依赖关系去掉,由IoC/DI容器来把Bean之间的关系注入到需要这些关系的对象里面
用一句话概述IoC:“不要来找我,我会去找你”。
1.2 IoC与DI(Dependency Injection,依赖注入)关系
DI即组件之间的依赖关系由容器在运行期决定,由容器动态的将某种依赖关系注入到组件之中。依赖注入机制只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不用关心具体的资源来自何处、由谁实现。
控制反转(IoC):从 IoC容器的角度来说
依赖注入(DI): 从应用程序的角度来说
1.3 Ioc(DI)与应用关系
谁依赖于谁:应用程序依赖于IoC/DI容器
为什么需要依赖:因为反转后,应用程序所依赖都资源都在IoC/DI容器中
谁注入谁:IoC/DI容器注入应用程序
注入了什么:注入了应用程序需要的外部资源,比如:依赖关系
1.4 演进过程
a:Java基础阶段

b:Factory阶段

c:Factory+XML+反射 阶段

d:IoC/DI阶段

1.5 IoC个人理解
a、应用程序不主动创建对象,但是要描述创建它们的方法
b、应用程序不直接进行服务的装配,但是要描述哪一个组件需要哪一项服务,由容器负责将这些装配在一起
2、举例说明

3、类型
3.1 设值注入(Spring支持)
Setter注入
例:ref代表spring会按照course为模板去new一个course并赋值到course中
<bean id="course" class="com.niit.DI.Course"></bean>
<bean id="student" class="com.niit.DI.Student">
<property name="course" ref="course" ></property>
<bean>
3.2 构造方法注入(Spring支持)
构造函数注入
例:构造函数方式注入的时候必须配置构造函数的参数
course" class="com.niit.DI.Course">
<bean id="course" class="com.niit.DI.Course"></bean>
<bean id="teacher" class="com.niit.DI2.Teacher">
<constructor-arg name="course" ref="course"></constructor-arg>
</bean>
备注: 自动注入(Spring支持)
例:byName 从配置文件中查找跟被注入属性名称相同的bean, byType 按照被注入属性的类型从配置文件中查找跟被注入属性相同的类型(返回多个会异常)
<bean id="course" class="com.niit.DI.Course"></bean>
<bean id="person" class="com.niit.DI3.Person" autowire="byName"></bean>
网友评论