IoC 控制反转(IoC,Inversion of Control)
是一个概念, 是一种思想. 控制反转就是对对象控制权的转移, 从程序代码本身反转到了外部容器. 把对象的创建, 初始化, 销毁等工作交给 spring 容器来做. 由 spring 容器控制对象的生命周期. 即是将 new 的过程交给 spring 容器去处理
(例如: 早上去早餐店买了一个包子, 包子是早餐店做的, 你通过钱买下了包子, 包子的决定权就从早餐店转移到了你的手上)
DI 依赖注入:
依赖注入 DI 是指程序运行过程中, 若需要调用另一个对象协助时, 无须在代码中创建被调用者, 而是依赖于外部容器, 由外部容器创建后传递给程序. 依赖注入是目前最优秀的解耦方式. 依赖注入让 Spring 的 Bean 之间以配置文件的方式组织在一起, 而不是以硬编码的方式耦合在一起的.
要理解这两个概念, 首先要搞清楚以下几个问题:
参与者都有谁?
依赖: 谁依赖于谁? 为什么需要依赖?
注入: 谁注入于谁? 到底注入什么?
控制反转: 谁控制谁? 控制什么? 为何叫反转(有反转就应该有正转了)?
依赖注入和控制反转是同一概念吗?
下面就来简要的回答一下上述问题, 把这些问题搞明白了, IoC/DI 也就明白了.
(1)参与者都有谁:
一般有三方参与者, 一个是某个对象; 一个是 IoC/DI 的容器; 另一个是某个对象的外部资源.
又要名词解释一下, 某个对象指的就是任意的, 普通的 Java 对象; IoC/DI 的容器简单点说就是指用来实现 IoC/DI 功能的一个框架程序; 对象的外部资源指的就是对象需要的, 但是是从对象外部获取的, 都统称资源, 比如: 对象需要的其它对象, 或者是对象需要的文件 资源等等.
(2)谁依赖于谁:
当然是某个对象依赖于 IoC/DI 的容器
(3)为什么需要依赖:
对象需要 IoC/DI 的容器来提供对象需要的外部资源
(4)谁注入于谁:
很明显是 IoC/DI 的容器 注入 某个对象
(5)到底注入什么:
就是注入某个对象所需要的外部资源
(6)谁控制谁:
当然是 IoC/DI 的容器来控制对象了
(7)控制什么:
主要是控制对象实例的创建
(8)为何叫反转:
反转是相对于正向而言的, 那么什么算是正向的呢? 考虑一下常规情况下的应用程序, 如果要在 A 里面使用 C, 你会怎么做呢? 当然是直接去创建 C 的对象, 也就是说, 是在 A 类中主动去获取所需要的外部资源 C, 这种情况被称为正向的. 那么什么是反向呢? 就是 A 类不再主动去获取 C, 而是被动等待, 等待 IoC/DI 的容器获取一个 C 的实例, 然后反向的注入到 A 类中.
来源: http://www.bubuko.com/infodetail-3069766.html