实际上 DI(依赖注入)
并不是架构思想,它只是 IoC(控制反转)
的一种实现方式。之所以将其列到这里,是因为大多数的程序都是通过 DI
来实现 IoC
的,导致很多人分不清 IoC
和 DI
的关系。同时,只介绍 IoC
而不介绍 DI
实现,显得苍白无力。关于 IoC
的介绍,参见笔记
组件之间的依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。
依赖注入的 目的
并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。
通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。
理解 DI
的关键是: 谁依赖了谁,为什么需要依赖,谁注入了谁,注入了什么
- 谁依赖了谁
显而易见,是 应用程序
依赖了 IoC容器
- 为什么需要依赖
应用程序
需要 IoC容器
来提供对象需要的外部资源(包括对象、资源、常量数据等)
- 谁注入了谁
显而易见,是 IoC容器
注入了应用程序依赖的对象
- 注入了什么
注入了某个对象所需的外部资源(包括对象、资源、常量数据等)
代码实现
参照笔记:手写实现