Spring基础02--控制反转(IOC)
2018-01-24 22:41
393 查看
三种依赖注入的方式:
构造方法注入(constructor injection)
setter方法注入(setter injection)
接口注入(interface injection)
1)构造方法注入:
被注入对象可以通过在其构造方法中声明依赖对象的参数列表, 让外部(通常是IOC容器)知道它需要哪些依赖对象。
2)setter 方法注入
当前对象只要为其依赖对象所对应的属性添加setter 方法,就可以通过setter方法将相应的依赖对象设置到被注入对象中。
这样,就可以通过调用setListener和setPersistener方法为Provider对象注入所依赖的对象了。
setter方法注入不像构造方法注入那样,让对象构造完成后即可使用,需要在对象构造完成后再注入。
3)接口注入
相对于前两种注入方式来说,接口注入被注入对象如果想要注入依赖对象,就必须实现某个接口。这个接口提供一个方法,用来为其注入依赖对象,最终通过这些接口来了解应该为被注入对象注入什么依赖对象。接口注入比较死板和烦琐,如果需要注入依赖对象,被注入对象就必须声明和实现另外的接口。
注意:接口中声明方法的参数类型,必须是“被注入对象”所依赖对象的类型。
三种注入方式的比较 :
1)构造方法注入。
优点:
对象在构造完成之后,即已进入就绪状态,可以马上使用。
缺点:
当依赖对象比较多的时候,构造方法的参数列表会比较长。而通过反射构造对象的时候,对相同类型的参数的处理会比较困难,维护和使用上也比较麻烦。而且在Java中,构造方法无法被继承,无法设置默认值。对于非必须的依赖处理,可能需要引入多个构造方法,而参数数量的变动可能造成维护上的不便。
2) setter方法注入。
优点:
因为方法可以命名,所以setter方法注入在描述性上要比构造方法注入好一些。 另外,setter方法可以被继承,允许设置默认值,而且有良好的IDE支持。
缺点:
对象无法在构造完成后马上进入就绪状态。
3) 接口注入。
从注入方式的使用上来说,接口注入是现在不甚提倡的一种方式,因为它强制被注入对象实现不必要的接口,带有侵入性。而构造方法注入和setter 方法注入则不需要如此。
综上所述:构造方法注入和setter方法注入因为其侵入性较弱,且易于理解和使用,所以是现在使用最多的注入方式。
构造方法注入(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方法注入因为其侵入性较弱,且易于理解和使用,所以是现在使用最多的注入方式。
相关文章推荐
- JavaEE框架——Spring入门基础(控制反转Ioc和切面技术Aop)
- Spring基础知识之IOC(控制反转)
- Spring基础、IOC(控制反转)、AOP(面向切面编程)、Log4j、注解配置
- Spring基础学习二 : IOC控制反转
- Spring入门 02 - 控制反转IoC
- Spring学习--IOC基础 知道什么叫做控制反转和依赖注入
- Spring基础、IOC(控制反转)、AOP(面向切面编程)、Log4j、注解配置
- spring学习笔记 -- day02 spring基础、IOC控制反转
- Spring基础学习(二)——IOC(控制反转)介绍
- Spring入门02 - 控制反转IoC
- Spring-IOC(控制反转)+DI(依赖注入)
- Spring---IOC(控制反转)和DI(依赖注入)
- Spring学习之——控制反转(IoC)与依赖注入(DI)
- spring控制反转(IOC)的原理
- Spring之IOC控制反转的理解
- Spring实现IOC(控制反转)的三种方式
- 如何理解Spring的控制反转IOC和依赖注入DI思想
- Spring的Ioc(控制反转)和DI(依赖注入)
- 关于springIOC控制反转,依赖注入
- Spring入门--控制反转(IOC)与依赖注入(DI)