什么是控制反转(IoC)?什么是依赖注入(DI)?两者关系如何 ?
1. IoC是什么?
IoC(Inversion of Control) – 控制反转。它不是一种技术,而是一种思想。要理解什么是控制反转。那么我们就要理解“是谁控制谁呢,为什么是反转呢”。
- 是谁控制谁:在传统的Java SE程序设计,我们要使用对象要在对象内通过new来创建,即应用程序主动创建依赖对象。而IoC是一个专门创建依赖对象的容器。即容器控制对象。
- 为什么是反转:因为IoC帮我们创建并注入依赖对象,对象只是被动地接受依赖对象(传统的是在对象内通过new来主动地创建依赖对象),所以是反转。即从主动获取依赖对象到被动接受依赖对象的反转!
2. DI是什么?
DI(Dependency Injection) – 依赖注入。在程序运行期间,容器动态地将依赖关系注入到组件中。要更好地了解DI,我们需要理解以下几点:
1、谁依赖谁:应用程序依赖于IoC容器;
2、为什么依赖:应用程序需要IoC容器提供外部资源;
3、谁注入谁:IoC容器向应用程序注入;
4、注入什么:IoC向应用程序注入外部资源,数据等。
3. 两者什么关系?
IoC和DI其实是同一概念的不同描述。由于IoC(控制反转)不好了解,所以在2004年,Martin Fowler给出了一个新的名称:“依赖注入”。“依赖注入”可以让人们更好地关注到依赖对象和注入这两个重要的东西。