spring bean的自动装配

spring bean的自动装配
            在spring框架应用场景中会有这么一种情况。一个bean在不同的使用类里面都要配置。这个bean相对来说是单独的。也就是说如果要装配这个bean.在不同的使用类里面都需要写相关的
注入代码。那有没有这么一种方式。可以通过配置自动的来注入bean到相关的属性中去。spring容器有这么四种自动装配的策略。 如byname、bytype、constructor、autodetect.

          byname ---把与bean的属性名字(id)具有相同的名字的其他bean自动装配到bean相对应属性中。如果没有匹配的bean则不进行装配。
          bytype ---把与bean的属性具有相同类型的其他bean自动装配到bean相对应属性中。如果没有匹配的bean则不进行装配
          constructor---把与bean的构造器入参具有相同类型的其他bean注入到相对应的构造器入参中。
          autodetect---这种方式是会优先使用constructor进行注入。不行则使用bytype.
          
          下面详细讲解这些注入方式
        1、 byname是把与bean的属性名字(id)具有相同的名字的其他bean自动装配到bean相对应属性中。如果没有匹配的bean则不进行装配。我们在之前配置的bean的方式如下
            <bean id="user" calss="com.cnpxx.news.user">
              <property name="age" value="1"/>
              <property name="caid" ref="caid"/>
           </bean>
          这里显示配置了caid属性。如果我们配置一个跟caid属性一样名字的bean。如

          <bean id="caid" class="com.cnpxx.news.caid"/>

          通过配置autowire属性为byname。spring会利用此信息进行自动装配。同时byname自动装配会遵循一个约定。就是为属性自动装配跟属性ID或则名字一样的bean.
          在这里spring会发现caid属性一样名字的bean通过setter方式进行装配。如果没有,则不装配。代码如
             <bean id="user" calss="com.cnpxx.news.user" autowire="byname">
              <property name="age" value="1"/>
             
           </bean>
         2、 bytype的注入方式是跟byname一样的。只是bytype匹配的是bean的类型。在当bean的属性与需要注入的其他bean是匹配的类型的时。spring将会进行自动装配。
          
           代码如
          <bean id="user" calss="com.cnpxx.news.user" autowire="bytype">
              <property name="age" value="1"/>
             
           </bean>
           但是bytype也有局限性。当与bean的属性匹配的类型多余一个的时候。spring是不会自己做出选择。而是抛出异常。
           所以在这个时候需要设置另外一个属性primary为true。但是spring默认情况下primary都为true。所以当你确定一个为优先装配的bean时设为true。其他设为false.
           
           3、 constructor是构造器注入方式。当使用这种注入方式时直接把<constructor/>属性删除。设置autowire为constructor。
             <bean id="user" calss="com.cnpxx.news.user" autowire="constructor">
           
              </bean>
             spring会去审视user类的构造器。当有跟构造器入参一样的类型的bean时。spring将进行自动装配。constructor是构造器注入方式跟bytype一样的局限性。
             即当有匹配的类型有多个时。spring就无从选择。
           4、autodetect注入方式应该算是比较好的注入策略。他会优先适用constructor进行注入。不行则用bytype方式。

           以上是spring自动进行装配的几种策略。可以自己根据实际情况进行使用。如有不恰当的地方还请指正。感谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值