Spring3.x--自动装配Bean属性

当涉及自动装配Bean的依赖关系时,Spring有多种处理方式,因此,Spring提供了4种各具特色的自动装配策略。

1、byName——把与Bean的属性具有相同名字(或者ID)的其他Bean自动装配到Bean的对应属性中,如果没有跟属性的名字相匹配的Bean,则该属性不进行装配。

2、byType——把与Bean的属性具有相同类型的其他Bean自动装配到Bean的对应属性中,如果没有跟属性相匹配的Bean,则该属性不被装配。

3、constructor——把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean构造器对应入参中。

4、autodetect——首先先尝试使用constructor进行自动装配。如果失败,再尝试byType进行自动装配。

一、byName自动装配






Spring配置文件在声明Bean时加上autowire="byName",这样该Bean就不用声明instrument这个属性,它会在上下文中找到一个id为instrument的Bean来装配这个属性,输出结果正是我们想要的。

二、byType自动装配

byType自动装配的工作方式类似于byName自动装配,只不过不再是匹配属性的名字而是检查属性的类型。当我们尝试使用byType自动装配,Spring会寻找哪一个Bean的类型与属性的类型相匹配。



performer这个Bean的instrument属性是Instrument类,Guitar类实现Instrument类,这两个Bean相匹配,所以instrument会自动装配到performer中的instrument属性中。

但是byType自动装配存在一个局限性,如果Spring寻找到多个Bean,它们的类型与需要自动装配的属性的类型相匹配,怎么办呢?这种场景下,Spring不会猜测哪一个Bean更适合装配,而是选择抛出异常。为了避免因为使用byType自动装配带来的歧义,Spring为我们提供了另外两种选择。

一种是Primary="false",另一种是auto-wire-candidate="false",添加两者之一表示该Bean不作为候选装配的Bean

三、constructor自动装配

constructor自动装配时,Spring会在上下文找到跟构造器入参类型匹配的Bean进行注入,跟byType有点相像

四、最佳自动装配

autowire="autodetect"

五、默认自动装配

如果需要为Spring应用上下文中每个Bean配置相同autowire属性,那么就可以要求spring为它创建所有Bean应用相同的自动装配策略来简化配置。我们所需要的做的仅仅是在根元素<beans>上添加一个default-autowire属性

六、显式混合装配



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值