Spring Ioc / DI
如何理解Ioc
Ioc—Inversion of Control,即是控制反转。不是什么技术,而是一种设计思想。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。把对象的创建、初始化、销毁等工作交给spring容器来做。由spring容器控制对象的生命周期。即是将 new 的过程交给spring容器去处理
在这我们可以进一步拆开去理解:
- 控制:何为控制?在传统 Java 程序设计中,我们直接在对象内部通过 new 的方式进行创建对象,让程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建。是谁去控制谁?Ioc控制着对象
- 反转:在讲解反转时,我们先理解一下什么是正转?传统的方式是由我们自己在对象中主动控制去直接获取依赖对象,这叫做正转。而反转则是有Ioc容器来创建以及注入依赖对象,简单一句话就是对象从传统的主动创建变成被动创建
如图所示:
传统程序设计:


作用
Ioc 可以把传统程序设计方式设计成松耦合,提高代码的简洁性、开发效率和代码高复用性
DI
DI—Dependency Injection,即 "依赖注入":是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。依赖注入是目前最优秀的解耦方式。依赖注入让Spring的Bean之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起的。和 Ioc 不同的是,Ioc是目的,DI是手段。
我们进一步深入分析→ "谁依赖于谁"、"为什么需要依赖"、"谁注入谁"、"注入了什么"
- 谁依赖于谁:当然是应用程序依赖于IoC容器
- 为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源
- 谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象
- 注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)

浙公网安备 33010602011771号