自动装配之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!