Spring的控制反转IoC

2016-05-03 11:56:12 +0000

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,用于降低程序代码之间的耦合度。

IOC的目的:

(1)脱开、降低类之间的耦合;

(2)倡导面向接口编程、实施依赖倒换原则; 

(3)提高系统可插入、可测试、可修改等特性。


实现方法:

实现控制反转主要有两种方式:依赖注入和依赖查找。两者的区别在于,前者是被动的接收对象,而后者是主动索取相应类型的对象。

1、依赖注入

依赖注入有如下实现方式:

   1)接口。实现特定接口以供外部容器注入所依赖类型的对象。

   2)set 方法。实现特定属性的public set方法,来让外部容器调用传入所依赖类型的对象。

   3)构造函数。实现特定参数的构造函数,在新建对象时传入所依赖类型的对象。

   4)注解。基于Java的注解功能,在私有变量前加“@Autowired”等注解,不需要显式的定义以上三种代码,便可以让外部容器传入对应的对象。

比如 A 类有一个类变量B类,那么在创建A类对象时Ioc容器会先创建B类对象传入A类对象中,A类对象是被动的接收B类对象。

<bean id="a" class="org.tiomg.A"/> 
<bean id="b" class="org.tiomg.B"/>

@Component
public class A{

 @AutoWired
 B b;

}


2、依赖查找

依赖查找更加主动,在需要的时候通过调用框架提供的方法来获取对象,获取时需要提供相关的配置文件路径、key等信息来确定获取对象的状态。例如通过ApplicationContext.getBean()方法在上下文中寻找名为a的对象。  

<bean id="a" class="org.tiomg.A"/> 
<bean id="b" class="org.tiomg.B"/>  

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/application-context.xml"); 
A a = applicationContext.getBean("a");