/**
*
* 依赖者类,需要注入两个bean
* 第一个bean的name为one
* 第二个bean的name为two
*
*info是一个String类型,要手动注入
*/
public class Dependent {
private String info;
private Collaborator one;
private Collaborator two;
public void setInfo(String info) {
this.info = info;
}
public void setOne(Collaborator one) {
this.one = one;
}
public void setTwo(Collaborator two) {
this.two = two;
}
public String toString() {
return "Dependent [info=" + info + ",\n\tone=" + one + ",\n\ttwo=" + two + "\n]";
}
}
public class Collaborator {
private String info;
public void setInfo(String info) {
this.info = info;
}
public String toString() {
return "Collaborator [info=" + info + "]";
}
}
配置元数据:
<bean id="dependent" class="SpringTest.autoWireByName.Dependent" autowire="byName">
<property name="info" value="This is dependent"/>
</bean>
<bean id="one" class="SpringTest.autoWireByName.Collaborator">
<property name="info" value="This is collaboratorOne"/>
</bean>
<bean id="two" class="SpringTest.autoWireByName.Collaborator">
<property name="info" value="This is collaboratorTwo"/>
</bean>
<bean id="zero" class="java.lang.String">
<constructor-arg value="This is stringBean"/>
</bean>
输出注入后的结果:System.out.println(context.getBean("dependent"));
输出结果:
分析:
Dependent类共有三个属性,第一个属性名为info,是一个String类型,需要手动注入;第二个属性和第三个属性可以通过自动装配的方式注入,由于使用byName方式自动装配,所以,要被注入的bean的名字要和属性(字段)名相同;第二个和第三个的属性名分别为one和two,因此,创建一个id/name为one的bean,类型要与属性one的类型匹配;创建一个id/name为two的bean,类型要与属性two的类型匹配。
注:通过byName进行匹配时,找到了要被注入的bean,这个bean的类型一定要和属性的类型匹配,否则就会抛出异常。