Spring三种依赖注入方式

Spring三种依赖注入方式

Spring依赖注入方式一共有三种:

  1. 构造方法注入
  2. setter方法注入
  3. 接口注入

构造方法注入

顾明思议,需要在构造方法上声明所依赖的参数列表,让Spring知道你需要依赖哪些东西。

    private UserDao userDao;    

        //使用构造方式赋值    
        public UserManagerImpl(UserDao userDao) {    
            this.userDao = userDao;    
    }    

setter方法注入

将所需要依赖的属性,生成符合规范的set方法。对于JavaBean对象来说,通常会通过setXXX()和getXXX()方法来访问对应属性。 这些setXXX()方法统称为setter方法, getXXX()当然就称为getter方法。

private UserDao userDao;    

//使用设值方式赋值    
public void setUserDao(UserDao userDao) {    
    this.userDao = userDao;    
}    

接口注入

 private InterfaceB clzB;  
  public void doSomething() {  
    Ojbect obj = Class.forName(Config.BImplementation).newInstance();  
    clzB = (InterfaceB)obj;  
    clzB.doIt();   
  }  

解释一下上述的代码部分,ClassA依赖于InterfaceB的实现,我们如何获得InterfaceB的实现实例呢?传统的方法是在代码中创建 InterfaceB实现类的实例,并将赋予clzB.这样一来,ClassA在编译期即依赖于InterfaceB的实现。为了将调用者与实现者在编译期分离,于是有了上面的代码。我们根据预先在配置文件中设定的实现类的类名(Config.BImplementation),动态加载实现类,并通过InterfaceB强制转型后为ClassA所用,这就是接口注入的一个最原始的雏形。
—来源于龙腾四海365博客

三种注入方式的比较

接口注入

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

构造方法注入

这种注入方式的优点就是,对象在构造完成之后,即已进入就绪状态,可以 9
马上使用。缺点就是,当依赖对象比较多的时候,构造方法的参数列表会比较长。而通过反
射构造对象的时候,对相同类型的参数的处理会比较困难,维护和使用上也比较麻烦。而且
在Java中,构造方法无法被继承,无法设置默认值。对于非必须的依赖处理,可能需要引入多
个构造方法,而参数数量的变动可能造成维护上的不便。

setter方法注入

因为方法可以命名, 所以setter方法注入在描述性上要比构造方法注入好一些。 11
另外, setter方法可以被继承,允许设置默认值,而且有良好的IDE支持。缺点当然就是对象无
法在构造完成后马上进入就绪状态。

综上所述,构造方法注入和setter方法注入因为其侵入性较弱,且易于理解和使用,所以是现在使
用最多的注入方式;而接口注入因为侵入性较强,近年来已经不流行了。 《Spring揭秘》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值