ioc是什么
IOC是Inversion of Control的缩写,中文叫做“控制反转”。
其思想是反转资源获取的方式。传统的资源查找方式要求组件向容器发起请求查找资源,作为回应,容器适时的返回资源。而应用了IOC后,则是容器主动的将资源推送给它所管理的组件,组件所要做的仅是选择一种合适的方式来接收这个资源,这种行为也被称为查找的被动形式。
简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外部是透明的,从而降低了解决问题的复杂度,而且可以灵活地被重用和扩展。
下面通过以下例子来进行说明:
由上图可知,ABCD四个对象没有耦合关系,他们通过第三方(也就是IOC容器)相互依靠。全部对象的控制权都在IOC容器上,它是整个系统的关键核心,将系统中的对象全部关联起来发挥作用。
如果没有IOC容器会怎样?
由第二章图片可知,ABCD四个对象之间现在是没有关系的,当时使用A时,不需要考虑其他,他们之前的依赖消失了。如果你想在A中使用B,那么久需要自己制造这种依赖。而系统的中依赖是及其复杂和多样的。出现的ioc容器不仅能解决耦合问题,还能让开发人员只要负责好自己的类即可,不比考虑和其他类的关系,这对于开发来说是及其方便的。
DI--IOC的另一种表述方式:即组件以一些预先定义好的方式(例如:setter方法)接受来自如容器的资源注入,相对于IOC而言,这种表述更加的直接。
DI又是什么呢?
2004年,Martin Fowler探讨了同一个问题,既然IOC是控制反转,那么到底是“哪些方面的控制被反转了呢?”,经过详细地分析和论证后,他得出了答案:“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。于是,他给“控制反转”取了一个更合适的名字叫做“依赖注入(Dependency Injection)”。他的这个答案,实际上给出了实现IOC的方法:注入。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。
(我的理解是IOC是一种控制反转的思想,而DI是实现控制反转的方式)
所以,依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。
参考文章:https://blog.csdn.net/ivan820819/article/details/79744797