控制反转的概念理解

在Spring中,常常用到控制反转(IoC),而这个概念的理解恰恰是最困难的部分:

控制反转中,“反转”的概念在于,将对象的控制权由代码本身移交给容器,过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。

多数时候,控制反转也叫依赖注入(DI),(虽然控制反转的实现不止依赖注入一种,还有其它方式如依赖查找等)

【下面的内容摘自维基百科】

依赖注入的方法是:

        * 如果类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则不依赖于任何类。

一般控制反转分为3类:

        *     Type 1 : 基于接口 (interface injection)。Depending object 需要实现(implement) 特定 interface 以供框架注入所需对象。
        *     Type 2 : 基于设值函数 (setter injection)。Depending object 需要实现特定 setter 方法 (但不需要依赖特定interface),
        *     Type 3 : 基于构造函数 (constructor injection)

posted @ 2013-05-03 17:52  Daniel·广  阅读(1176)  评论(0编辑  收藏  举报