您的位置:首页 > 编程语言 > Java开发

Spring基础02--控制反转(IOC)

2018-01-24 22:41 393 查看
三种依赖注入的方式:

构造方法注入(constructor injection)

setter方法注入(setter injection)

接口注入(interface injection)

1)构造方法注入:

被注入对象可以通过在其构造方法中声明依赖对象的参数列表, 让外部(通常是IOC容器)知道它需要哪些依赖对象。

public Provider(Listener listner,Persister persister) {
this.listener = listner;
this.persistener = persister;
}


2)setter 方法注入

当前对象只要为其依赖对象所对应的属性添加setter 方法,就可以通过setter方法将相应的依赖对象设置到被注入对象中。

public class Provider {
private Listener listener;
private Persister persister;
public Listener getListener() {
return listener;
}
public void setListener(Listener listener) {
this.listener = listener;
}
public Persister getPersistener() {
return persistener;
}
public void Persistener(Persister persistener) {
this.persistener = persistener;
}
}


这样,就可以通过调用setListener和setPersistener方法为Provider对象注入所依赖的对象了。

setter方法注入不像构造方法注入那样,让对象构造完成后即可使用,需要在对象构造完成后再注入

3)接口注入

相对于前两种注入方式来说,接口注入被注入对象如果想要注入依赖对象,就必须实现某个接口。这个接口提供一个方法,用来为其注入依赖对象,最终通过这些接口来了解应该为被注入对象注入什么依赖对象。接口注入比较死板和烦琐,如果需要注入依赖对象,被注入对象就必须声明和实现另外的接口。

注意:接口中声明方法的参数类型,必须是“被注入对象”所依赖对象的类型。

三种注入方式的比较 :

1)构造方法注入。

优点:

对象在构造完成之后,即已进入就绪状态,可以马上使用。

缺点:

当依赖对象比较多的时候,构造方法的参数列表会比较长。而通过反射构造对象的时候,对相同类型的参数的处理会比较困难,维护和使用上也比较麻烦。而且在Java中,构造方法无法被继承,无法设置默认值。对于非必须的依赖处理,可能需要引入多个构造方法,而参数数量的变动可能造成维护上的不便。

2) setter方法注入。

优点:

因为方法可以命名,所以setter方法注入在描述性上要比构造方法注入好一些。 另外,setter方法可以被继承,允许设置默认值,而且有良好的IDE支持。

缺点:

对象无法在构造完成后马上进入就绪状态。

3) 接口注入。

从注入方式的使用上来说,接口注入是现在不甚提倡的一种方式,因为它强制被注入对象实现不必要的接口,带有侵入性。而构造方法注入和setter 方法注入则不需要如此。

综上所述:构造方法注入和setter方法注入因为其侵入性较弱,且易于理解和使用,所以是现在使用最多的注入方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: