自动装配之byType

自动装配之byType

byType如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置dependency-check="objects"Spring抛出异常。

下面通过示例来理解:

JavaBean代码:

//JavaBeanàAddressServiceImpl定义了一个name属性,和一个相应的set依赖注入方法

public class AddressServiceImpl {

    /**住址*/

    private String address;

    public void setAddress(String address){

       this.address=address;

    }

}

//JavaBeanàHomeAddressServiceImpl,继承上者,且有一个构造函数

public class HomeAddressServiceImpl extends AddressServiceImpl {

    private String address;

    public void setAddress(String address){

       this.address=address;

    }

    public HomeAddressServiceImpl(String address){

       this.address=address;

    }

}

//JavaBeanàEmpServiceImpl,定义一个companyAddress,和一个相应的set依赖注入方法

public class EmpServiceImpl {

    /**公司地址*/

    private AddressServiceImpl companyAddress;   

    public void setCompanyAddress(AddressServiceImpl companyAddress){

       this.companyAddress=companyAddress;

    }

}

byType.xml文件:

<bean id="AddressServiceImpl" class="cn.csdn.service. AddressServiceImpl"

       scope="singleton">

       <property name="address">

           <value>北京海淀上地软件园</value>

       </property>

</bean>

<bean id="homeAddressServiceImpl" class="cn.csdn.service.HomeAddressServiceImpl"

       scope="singleton">

<!--       <property name="address">

           <value>北京海淀上地软件园</value>

       </property>

-->

       <constructor-arg index="0">

         <value>北京</value>

       </constructor-arg>

</bean>

<bean id="empServiceImpl" class="cn.csdn.service.EmpServiceImpl"

       scope="singleton" autowire="byType" />

 

注意:上面的黄色区域和绿色区域只择其一

       当有多个相同类型的bean时,会出现bug

猜你喜欢

转载自far-ranqing.iteye.com/blog/1014416
今日推荐