在 Java 开发面试中,常常会被问到 Spring IOC 是什么,让谈谈本身的理解。在工做开发中,若是可以理解 Spring IOC 设计模式的话,对排查疑难问题也是颇有帮助的。今天这篇文章就先通俗易懂地介绍一下 Spring IOC 。面试
参考连接:
IOC:Inversion Of Control,即控制反转,是一种设计思想。在传统的 Java SE 程序设计中,咱们直接在对象内部经过 new 的方式来建立对象,是程序主动建立依赖对象;而在Spring程序设计中,IOC 是有专门的容器去控制对象。设计
所谓控制就是对象的建立、初始化、销毁。cdn
总结:IOC 解决了繁琐的对象生命周期的操做,解耦了咱们的代码。对象
所谓反转:生命周期
实际上是反转的控制权,前面提到是由 Spring 来控制对象的生命周期,那么对象的控制就彻底脱离了咱们的控制,控制权交给了 Spring 。这个反转是指:咱们由对象的控制者变成了 IOC 的被动控制者。资源
IOC 能作什么?开发
IOC 容器完美解决了耦合问题,甚至可让互不相关的对象产生注入关系。it
在 IOC 模式下,你只须要设计良好的流程和依赖,定义出须要什么,而后把控制权交给 Spring 便可。io
DI:Dependency injection,即依赖注入。
依赖注入是一种实现,而 IOC 是一种设计思想。从 IOC 到 DI ,就是从理论到实践。程序把依赖交给容器,容器帮你管理依赖,这就是依赖注入的核心。
好处:依赖注入下降了开发的成本,提升了代码复用率、软件的灵活性。
谁依赖谁,为何须要依赖;谁注入谁,注入了什么:
IOC 和DI 的关系:
是同一律念不一样角度的描述,但实际上也有区别。IOC 强调的是容器和对象的控制权发生了反转,而 DI 强调的是对象的依赖由容器进行注入。从广义上讲,IOC 是一种开发模式,DI 是其中的一种实现方式,能够理解为:使用依赖注入来实现了控制反转。Spring 选择了 DI,从而使 DI 在 Java 开发中深刻人心。
IOC:是一种设计思想。在 Spring 开发中,由 IOC 容器控制对象的建立、初始化、销毁等。这也就实现了对象控制权的反转,由 咱们对对象的控制 转变成了 Spring IOC 对对象的控制。IOC 解耦了代码,甚至可让互不相关的对象产生注入关系。
DI:是 IOC 的具体实现。程序把依赖交给容器,容器帮你管理依赖,这就是依赖注入的核心。还须要明白 谁依赖谁,为何须要依赖;谁注入谁,注入了什么 等逻辑。
IOC 强调的是容器和对象的控制权发生了反转,而 DI 强调的是对象的依赖由容器进行注入。