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