Spring学习之Bean的自动装配(非注解)

一、四种类型的自动装配

byName

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

byType

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

constructor

Bean构造器入参具有相同类型的其他Bean自动装配的到Bean的构造器对应的入参中

autodetect

首先尝试使用constructor进行自动装配,如果失败则尝试使用byType进行自动装配。

 

1byName自动装配

【装配过程】Spring会为属性自动装配ID与该属性名字相同的Bean

【缺点】需要时Bean的名字与其他Bean的属性名字一致

<bean   id="instrument"   class="com.bbp.springInAction.beans.Saxophone"/>

 

<bean   id="kenny"   class="com.bbp.springInAction.beans.Instrumentalist"   autowire="byName">

<property   name="song"   value="MySun"/>

</bean>

 

2byType自动装配

【装配过程】Spring会寻找类型与需要填充的属性相同的Bean

【局限性】Spring找到多个类型与需要自动装配的属性的类型相匹配的Bean时会抛出异常

【局限性的解决办法】

     为自动装配标识一个首选Bean

可以使用<bean>元素的primary属性,默认属性为true,在使用时是将非首选Beanprimary属性设置成false

     取消某个Bean自动装配的候选资格

排除某些Bean可以设置Beanautowire-candidate属性为false

 

3constructor自动装配

【装配过程】Spring会在应用上下文中自动选择Bean注入到构造器入参中

【局限性】除了和byType一样的局限性外,如果有多个构造器,它们都满足自动装配的条件,Spring也会  

                      抛出异常

 

4、最佳的自动装配——autodetect

 

【装配过程】当配置一个Beanaurowire属性为autodetect时,Spring将首先尝试使用constructor自动装配,如果没有发现与构造器相匹配的Bean时,Spring将尝试使用byType自动装配。

 

二、默认的自动装配

 

<beans  default-autowire="byType"><beans/>

 

设置了上述的配置,会使Spring容器中的自动装配装配aurowire属性默认为default-autowire所配置的方式

 

【说明】

  autowire默认值是default ,并非是nonedefualt-autorwire的默认值是noone,即指定的Spring配置文件中的所有Bean都不使用自动装配;在autowire的默认情况下是遵循defualt-autorwire的设置,即指定的Spring配置文件中的所有Bean都不使用自动装配。

 

<beans/>元素中设置了default-autowire 属性后,可以使用<bean/>元素中的 aurowire属性来覆盖<beans/>元素所配置的默认自动装配策略

 

四、混合使用自动装配和限制装配

 

在对某个Bean选择了自动装配的策略后,任然可以为该Bena的任意一个属性配置<property/>元素。这样在采用自动装配策略后,通过显示地装配Bean的属性可以覆盖该属性的自动装配,进而规避了“多匹配”而抛出的异常。

 

【注意】不能混合使用constructor自动装配策略和<constructor-arg/>元素

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值