反转了什么:将原有的【自己主动依赖另一个对象到自身】,反转成为【由第三方管理容器来主动注入另一个对象到自身】,获取另一个对象的控制权由原有的【自身】反转到了【IOC容器主动注入
所以【控制反转】和【依赖注入】实际上是从不同角度描述一个事件,控制反转(IOC)描述【控制权的移交】,依赖注入(DI)描述【对象“依赖“ioc容器对自身“注入“另一个对象】
转为
由一个第三方容器来控制,将所需的对象进行分配,实现对象之间的解耦
软件系统在没有引入IOC容器之前,如图1所示,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。
软件系统在引入IOC容器之后,这种情形就完全改变了,如图3所示,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。
通过前后的对比,我们不难看出来:对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。
网友评论