概念:
1、复杂系统分解成互相合作的对象,接着“第三方”解耦各层间的依赖关系,由IOC(Inversion of Control)容器【即Dependency Injection依赖注入】负责对象的创建和维护,容器在运行时动态将依赖对象注入到组件中;
2、即是某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定;
让调用类对某一接口实现类的依赖关系由第三方(容器或协作类)注入,以移除调用类对某一接口实现类的依赖。
3、把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言的的反射编程,根据配置文件中给出的类名生成相应的对象。
类型:
构造函数注入
sprig支持
通过调用类的构造函数,将接口实现类通过构造函数变量传入
被注入对象在其构造方法中声明依赖对象的参数,IoC检查被注入对象的构造方法,取得它所需要的依赖对象列表,进而为其注入相应的对象,IoC负责被注入对象的构造或生命周期
pulic class IClass{
private One o;
private Two t;
public iClass(One o,Two t){
this.o=o;
this.t=t;
}
}
属性注入
spring支持
通过Setter方法完成调用类所需依赖的注入,使用时调用、更加灵活方便;
通过调用set方法为A对象注入所依赖的对象public class A { private B b; private C c; public void setb(B b) { this.b = b; } public void setc(C c) { this.c = c; } }
public class DMove { public void direct(){ B b = new bOne(); A a = new A(); //①调用属性Setter方法注入 a.setb(b); a.*(); } }
接口注入
将调用类所有依赖注入的方法抽取到一个接口中,调用类通过实现该接口提供相应的注入方法
通过接口注入需要额外声明一个接口,增加了类的数目,而且它的效果和属性注入并无本质区别,因此我们不提倡采用这种方式
通过容器完成依赖关系的注入
通过配置文件或注解描述类和类之间的依赖关系,自动完成类的初始化和依赖注入的工作。(反射)
控制反转:
当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方,而不是A主动去创建、维护B
http://www.cnblogs.com/ttrjba/p/3511935.html
http://blog.youkuaiyun.com/xz0125pr/article/details/49129659
http://stamen.iteye.com/blog/1489223/ 通俗易懂的文章又一篇
http://blog.youkuaiyun.com/xiaoxing1521025/article/details/8846022