Spring的IOC容器—Bean的自动装配

我们对XML配置文件装配Bean的方式都很熟悉了,但是随着业务的复杂性,我们可能编写越来越复杂的XM配置。

Spring提供了4种类型的自动装配的方式,帮助我们减少XML的配置数量。如下:


byName:根据与bean的属性具有相同名字(或者ID)的其他bean进行注入

byType:   根据与bean的属性具有相同类型的其他bean进行注入

constructor:根据与bean的构造函数参数有相同类型的bean进行注入

autodetect :  首先尝试使用constructor进行注入,失败则尝试使用byType。


1. ByName

为属性自动装配ID与属性的名字相同的bean

<bean id="Huohuo" class= "com.tgb.depencyimpl.Huohuo">  
        <property name="eat" ref="WideMouthEat"></property>  
    </bean>  
    <bean id="WideMouthEat" class="com.tgb.depencyimpl.WideMouthEat">  
</bean>

修改配置文件:

<bean id="Huohuo" class= "com.tgb.depencyimpl.Huohuo" autowiire=”byName”/>  
    <bean id="WideMouthEat" class="com.tgb.depencyimpl.WideMouthEat">  
    </bean>

byName自动遵循一项约定:为属性自动装配ID与属性的名字相同的bean。通过设置autowire属性为byName,Spring将特殊对待Huohuo的所有属性,为这些属性寻找与名字相同的spring bean Spring会发现 WideMouthEat属性可以通过setter注入来进行自动装配。

2. ByType

类似于byName,只不过不是匹配属性的名字,而是检查属性的类型。例如上面的例子autowire属性设置为byType,Spring会查找哪一个bean的类型与WideMouthEat类型相匹配。如果匹配,则把该bean装配到Huohuo的属性WideMouthEat中。

注意:如果存在多个Bean,他们的类型与需要自动装配的类型相同。可以使用primary属性,标识首选bean。默认true.也可以设置autowire-candidate属性为false


3. Constructor

如果要通过构造器注入来配置Bean,我们可以移除<constructor-arg>元素,采用autowire=”constructor”属性自动选择bean注入到构造器中。例如:通过调用public Yunyun(Eat eat)将其注入。

<bean id="Yunyun" class= "com.tgb.depencyimpl.Yunyun" autowire="constructor ">   
</bean>    
<bean id="Eat" class="com.tgb.depencyimpl.Eat"/>

4. Autodetect

这种情况下Spring会先尝试使用constructor自动装配,如果没有发现与构造器相匹配的bean时,Spring将尝试使用byType自动装配。例如:

<bean id="Yunyun" class= "com.tgb.depencyimpl.Yunyun" autowire="constructor ">   
</bean>    
<bean id="Eat" class="com.tgb.depencyimpl.Eat"/>

此例中,通过调用public Yunyun(Eat eat)将其注入。


总结:自动装配可以让我们减少XML配置数量,但是同时也增加了配置文件的复杂性。特别是应付多种相同Bean需要装配时,需要花费力气去知道哪一个Bean需要被自动注入。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值