03. 依赖注入
IoC
在
依赖注入的方法是:
- 如果类
X 的一个实例对象x 调用了类Y 的一个实例对象y 的方法,那么就称类X 依赖于类Y 。为了打破这种依赖——“反转”,首先我们可以引入一个接口I( 第三方类) ,接口I 中声明了对象y 将被对象x 调用的所有方法;然后,我们对类Y 稍加改造,使其实现接口I ;最后,我们把在对象x 中对y 的调用改为对接口I 中对应方法的调用。经过这番改造后,原先的X 对Y 的依赖关系不存在了,类X 和Y 现在都依赖于接口I 。 - 这种通过引入接口
I 来消除类X 对Y 的依赖的方法,被称作“控制反转”,又叫做“依赖注入”。 - 需要注意的是,类
Y 可能还依赖于其他类。在应用反转之前,X 依赖于Y ,从而也间接依赖于Y 所依赖的所有“其他类”。应用控制反转之后,不仅消除了X 对Y 的直接依赖,且前面提到的那些所有的间接依赖也消除了。而新引入的接口I 则不依赖于任何类。
一般控制反转分为
Type 1 : 基于接口(interface injection) 。Depending object 需要实现(implement) 特定interface 以供框架注入所需对象。Type 2 : 基于设值函数(setter injection) 。Depending object 需要实现特定setter 方法( 但不需要依赖特定interface) ,Type 3 : 基于构造函数(constructor injection)
套用