一、什么是控制反转
IoC(Inversion of Control)控制反转,是面向对象编程中的一种设计原则,用来降低计算机代码之间的耦合度。
完整版:在传统面向对象的编码过程中,当类与类之间存在依赖关系时,通常会直接在类的内部创建依赖对象,这样就导致类与类之间形成了耦合,依赖关系越复杂,耦合程度就会越高,而耦合度高的代码会非常难以进行修改和单元测试。而 IoC 则是专门提供一个容器,进行依赖对象的创建和查找,将对依赖对象的控制权由类内部交到容器这里,这样就实现了类与类的解耦,保证所有的类都是可以灵活修改。
二、什么是 DI
IoC 只是一种设计原则,而 DI 则是实现 IoC 的一种实现技术;
理解 DI 的关键是 “谁依赖了谁,为什么需要依赖,谁注入了谁,注入了什么”:
- 谁依赖了谁:当然是应用程序依赖
IoC 容器; - 为什么需要依赖:应用程序需要
IoC 容器来提供对象需要的外部资源(包括对象、资源、常量数据); - 谁注入谁:很明显是
IoC 容器注入应用程序依赖的对象; - 注入了什么:注入某个对象所需的外部资源(包括对象、资源、常量数据)。