某些课程中讲解byName属性时只在注入的类中写一个属性,就依靠这个属性去寻找对应bean中id为此属性的类,进行依赖注入。
但是没有提到如果注入的类中有多个属性,该如何去寻找对应的类。
通过实验得出了,如果有多个属性值的话会装配所有出现的属性。
下面举例说明:有三个类,分别为Waiter、Waiter2、Restaurant,其中Watier和Waiter2注入到Restaurant类中
1.Waiter类
package ioc2;
public class Waiter {
public Waiter() {
System.out.println("Waiter()");
}
}
2.Waiter2类
package ioc2;
public class Waiter2 {
public Waiter2() {
System.out.println("Waiter2()");
}
}
Restaurant类
package ioc2;
public class Restaurant {
private Waiter wt;
private Waiter2 wt2;
public void setWt(Waiter wt) {
System.out.println("setWt()");
this.wt = wt;
}
public void setWt2(Waiter2 wt2) {
System.out.println("setWt2()");
this.wt2 = wt2;
}
@Override
public String toString() {
return "Restaurant [wt=" + wt + ", wt2=" + wt2 + "]";
}
public Restaurant() {
System.out.println("Restaurant()");
}
}
3.配置文件ioc2.xml(代替applicationContext)
此处只写出了要填加的代码:
<bean id="wt" class="ioc2.Waiter"/>
<bean id="wt2" class="ioc2.Waiter2"/>
<bean id="rest" class="ioc2.Restaurant"
autowire="byName"/>
4.JUnit测试的代码(直接点击右键,Run As)
public class TestCase2 {
//测试自动装配
@Test
public void test3() {
ApplicationContext ac = new ClassPathXmlApplicationContext("ioc2.xml");
Restaurant rest = ac.getBean("rest",Restaurant.class);
System.out.println(rest);
}
}
得到的结果为:
Waiter()
Waiter2()
Restaurant()
setWt()
setWt2()
Restaurant [wt=ioc2.Waiter@72d6b3ba, wt2=ioc2.Waiter2@1787f2a0]