什么是IoC和DI?DI是如何实现的?

简介: IoC叫控制反转,是Inversion of Control的缩写,DI(Dependency Injection)叫依赖注入,是对IoC更简单的诠释。控制反转是把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。

IoC叫控制反转,是Inversion of Control的缩写,DI(Dependency Injection)叫依赖注入,是对IoC更简单的诠释。控制反转是把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的”控制反转”就是对组件对象控制权的转移,从程序代码本身转移到了外部容器,由容器来创建对象并管理对象之间的依赖关系。IoC体现了好莱坞原则 – “Don’t call me, we will call you”。依赖注入的基本原则是应用组件不应该负责查找资源或者其他依赖的协作对象。配置对象的工作应该由容器负责,查找资源的逻辑应该从应用组件的代码中抽取出来,交给容器来完成。DI是对IoC更准确的描述,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。

举个例子:一个类A需要用到接口B中的方法,那么就需要为类A和接口B建立关联或依赖关系,最原始的方法是在类A中创建一个接口B的实现类C的实例,但这种方法需要开发人员自行维护二者的依赖关系,也就是说当依赖关系发生变动的时候需要修改代码并重新构建整个系统。如果通过一个容器来管理这些对象以及对象的依赖关系,则只需要在类A中定义好用于关联接口B的方法(构造器或setter方法),将类A和接口B的实现类C放入容器中,通过对容器的配置来实现二者的关联。

依赖注入可以通过setter方法注入(设值注入)、构造器注入和接口注入三种方式来实现,Spring支持setter注入和构造器注入,通常使用构造器注入来注入必须的依赖关系,对于可选的依赖关系,则setter注入是更好的选择,setter注入需要类提供无参构造器或者无参的静态工厂方法来创建对象。

目录
相关文章
|
22天前
|
容器
02_IOC控制反转 DI依赖注入
02_IOC控制反转 DI依赖注入
27 0
|
3月前
|
容器
IOC&DI
IOC&DI
21 0
|
3月前
|
容器
IOC 控制反转和DI依赖注入
IOC 控制反转和DI依赖注入
|
6月前
|
XML Java 数据格式
Spring IOC和DI的区别
很多人都会把ioc和di说成同一个东西,其实IOC和DI虽然在概念上可以笼统地视为同一事物,但其本质上存在区别。IOC(Inverse of Control,控制反转)从容器的角度描述,而DI(Dependency Injection,依赖注入)则从应用程序的角度描述。换言之,IOC是依赖倒置原则的设计思想,而DI则是该原则的具体实现方式。因此,我们希望能够更加严谨地区分这两个概念,以更好地理解和应用它们。
67 0
|
9月前
|
Java 测试技术 容器
一篇文章解释清楚IOC和DI
一篇文章解释清楚IOC和DI
|
9月前
|
设计模式 Java 容器
DI依赖注入篇
依赖注入(Dependency Injection,DI)是一种设计模式,它用于解耦组件之间的依赖关系。在DI中,组件不再负责自己的依赖对象的创建和管理,而是由外部容器负责将依赖对象注入到组件中。
85 1
YI
|
9月前
|
XML 设计模式 Java
SSM框架01-IoC和DI
SSM框架01-IoC和DI
YI
35 0
|
存储 Java 程序员
Spring容器 IoC思想 DI实现
Spring容器 IoC思想 DI实现
168 0
|
容器
DI——依赖注入
DI——依赖注入
114 0
|
XML 设计模式 前端开发