Spring中的控制反转(IOC)与依赖注入(DI)的理解

Spring框架 控制反转(IOC)与依赖注入(DI)

我认为最有助于理解IOC与DI的解释是胡小国的这篇文章:浅谈控制反转与依赖注入
而本人才疏学浅,就简单记录一下我对IOC与DI的理解

一、控制反转(IOC)

我就不说定义了,直接谈谈理解。
控制反转是对类与类之间解耦的一种思想。控制的意思就是在一个类A中使用另一个类B的内容,正常情况下是在A中创建B的对象(new),此时控制B类创建的是A类。反转是指A类将创建B类的控制权交给外部去处理,具体获取的方法、对象被获取时的状态由配置文件(Spring中是XML文件)来指定。也就是将控制反转了。

二、依赖注入(DI)

依赖注入是控制反转的一种具体实现方法。将A类对B类的控制权交给第三方(即IOC容器)

三.使用控制反转的好处:

在正常情况下,想在A类用B、C、D类时,需要在A类中进行创建相应对象(如图1)。这样做时A类与B、C、D类的之间耦合程度高。假设B类出现问题,那么就需要在A种对相应代码进行修改。
使用控制反转的思想后,将B、C、D类在IOC容器中配置到A类(如图2)。此时如果B类出现问题,并不需要对A类进行修改。

图1:Spring中的控制反转(IOC)与依赖注入(DI)的理解

图2:
Spring中的控制反转(IOC)与依赖注入(DI)的理解

四、控制反转在Spring框架中的应用

在Spring中所有的类都会在Spring容器中登记,告诉Spring你是个什么样的类,你需要什么类,然后Spring会在系统运行到适当的时候,把你要的类主动给你,同时也把你交给其他需要你的类。所有的类的创建、销毁都由 Spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是Spring。