Spring 系列 IOC

Posted by lichao modified on March 10, 2020

Robert Martin 大师提出了面向对象设计原则—-依赖倒置原则:

  • 上层模块不应该依赖于下层模块,它们共同依赖于一个抽象。
  • 抽象不能依赖于具象,具象依赖于抽象。

理解:

  1. 上层是使用者,下层是被使用者,这就导致了结果是上层依赖下层,下层变动了,自然就会影响到上层了,导致系统不稳定,甚至是牵一发而动全身。那怎么减少依赖呢?就是上层和下层都去依赖另一个抽象,这个抽象比较稳定,整个就来说就比较稳定了。
  2. 面向对象编程时面向抽象或者面向接口编程,抽象一般比较稳定,实现抽象的具体肯定是要依赖抽象的,抽象不应该去依赖于具体,应该依赖抽象。

IOC

IOC(Inversion Of Controll,控制反转)是一种设计思想,是说对象的控制权进行转移,转移到第三方,转移交给 IoC 容器进行管理。

有了 IoC 容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖 IoC 容器了,即由 Ioc 容器来控制对象的创建,通过 IoC 容器来建立它们之间的关系。合作对象的引用或依赖关系的管理由具体对象间管理转变为交给框架或 IOC 容器来完成;作为控制反转模式的具体实现,IOC 容器通过依赖注入的实现方式,很好的降低了框架的侵入性。

这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。IOC容器就像是一个工厂,当需要创建一个对象,只需要配置好配置文件/注解即可,不用考虑对象是如何被创建出来的,大大增加了项目的可维护性且降低了开发难度。

DI

依赖注入(Dependency Injection,DI),就是由 IoC 容器在运行期间,动态地将某种依赖关系注入到对象之中。组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,只需完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。