什么是IOC
Inversion Of Control(控制反转/反转控制),要注意的是IOC是一个技术思想,而不是一个技术实现。
IOC解决的问题
遇到的问题
在Java的开发过程中,我们经常需要在一个对象中引用另一个对象,这个时候就需要手动new一个对象,表明依赖关系。
IOC的解决
将对象的创建和管理交给IOC容器去做,我们只需要向IOC容器去拿就可以了。
整个的过程中,我们将对象的创建、管理等流程交给了IOC容器(Spring的IOC容器)去实现,这样我们就不需要考虑对象的创建和销毁等问题,同样的,我们也丧失了对象的管理权限。
控制
反转
将控制权交给外部环境,这里的环境也就是Spring框架
解决的问题
创建和管理对象并且维护对象之间的依赖关系,最终其实就是解决对象之间的耦合关系。
如何解决对象的耦合关系
在面向接口的开发过程中,一个接口通常有多个实现,如果我们使用 new 来实现对象之间的依赖关系,就将接口与实现类进行了绑定,同样也在类中进行了对象的强依赖,这是一种强耦合关系。
解决的方法其实就是我么只需要进行声明接口,而不需要直接 new 到具体的实现类,将强耦合降低为低耦合。
IOC和DI的区别
DI
Dependancy Injection:依赖注入
IOC和DI描述的是同一件事情,即对象的创建和管理以及依赖关系的维护这件事
只不过是角度不同
- IOC是站在对象的角度,也就是说将对象的创建以及管理的权利交给容器。
- DI是站在容器的角度,描述的是对象依赖的注入,也就是在容器中会将一个对象的依赖对象注入到该对象中。
DI的概念是在IOC之后。