Inverse of Control : 控制反转
IoC实例
软件系统在没有引入IOC容器之前,若对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。 软件系统在引入IOC容器之后,这种情形就完全改变了,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。
对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。
Spring中的IoC
Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从IoC容器中取出需要的对象。
Spring 配置容器必须至少一个(通常是一个以上)bean 定义组成。基于 XML 的配置元数据将这些 bean 配置为顶级<beans/>
元素内的<bean/>
元素。 Java 配置通常在@Configuration
类中使用@Bean
注解的方法。
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(DI)。
Code
context 是容器,负责创建对象。
依赖注入 通过 set
方法来实现,因此属性必须具有 set
方法。
注解: 在此段代码中,我们并不需要 new
一个对象,而是通过 context
直接 get
得到。
IoC创建对象方式
- 使用无参构造构造对象
- 在配置文件加载时,容器中管理的对象就已经初始化了
若想要使用有参构造函数构造对象:
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg index="0" value="7500000"/>
<constructor-arg index="1" value="42"/>
</bean>