IOC:控制反转、依赖注入 (Inversion of Control)
·对象由容器来创建,而不是他们自己
·对象本身并不知道他们自己是如何被配置的
IOC用到了工厂设计模式、反射技术。
IOC:由容器(框架)定制程序间的关系,不必象传统实现中由程序代码直接操控,控制权转到外部容器(框架)
·目的:提升组件的重用概率
依赖注入的实现—一接口注入:
·原理:通过定义某一类型的接口interface来标识一组功能相似的对象,并在这一组对象与其调用者间,在编译时分离,在运行时才动态加载实现类
·好处:使得调用者和组件对象间的依赖程度减小,提高了模块的独立性
依赖注入的实现--设值注入(属性注入)、构造注入(构造方法注入)
·设值注入:
原理:通过类的setter方法完成依赖关系的设置
好处:直观,容易
·构造注入:
原理:通过构造函数完成依赖关系的设定
优点:通用,利用Java语言的特性,来在运行时的一开始就建立起关联
·两者比较:
<1>设值注入的优点:
直观、自然
对于复杂依赖的关系,如果采用构造注入,会导致构造器过于臃肿,IOC容器在创建bean实例时,需要同时实例化其依赖的全部实例,因而导致性能下降。
<2>构造注入的优点:
可以在构造中决定依赖关系的注入顺序。
对于依赖关系无须变化的bean。构造注入更有用处。
更符高内聚的原则。
例:
public class ProString {
private IGetString getStr;
//构造方法注入
//public ProString(IGetString getStr) {
// this.getStr = getStr;
//}
public ProString(){
}
//属性注入
public IGetString getGetStr() {
return getStr;
}
public void setGetStr(IGetString getStr) {
this.getStr = getStr;
}
public String getData(){
String s=this.getStr.getString();
return s;
}