自动装配之byName
byName:根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。例如,在bean定义中将autowire设置为by name,而该bean包含master属性(同时提供setMaster(..)方法),Spring就会查找名为master
的bean定义,并用它来装配给master属性。
下面通过示例来理解:
JavaBean代码:
//JavaBeanàPerson定义了一个name属性,和一个相应的set依赖注入方法
public class Person {
private String name;
public void setName(String name) {
this.name = name;
}
}
//JavaBeanàStudentServiceImpl继承了Person
public class StudentServiceImpl extends Person{
}
//JavaBeanàTeacherServiceImpl,定义一个studentSerciceImpl,和一个相应的set依赖注入方法和get方法。
public class TeacherServiceImpl {
private StudentServiceImpl studentServiceImpl;
public void setStudentServiceImpl(StudentServiceImpl studentServiceImpl) {
this.studentServiceImpl = studentServiceImpl;
}
public StudentServiceImpl getStudentServiceImpl() {
return studentServiceImpl;
}
}
byname.xml文件:
不用byName:
<bean id="person" class="cn.csdn.byname.Person">
<property name="name">
<value>Well_Being</value>
</property>
</bean>
<bean id="studentServiceImpl" class="cn.csdn.byname.StudentServiceImpl" scope="singleton" parent="person"/>
<bean id="teacherServiceImpl" class="cn.csdn.byname.TeacherServiceImpl" scope="singleton">
<property name="studentServiceImpl" ref="studentServiceImpl"/>
</bean>
用byName:
<bean id="person" class="cn.csdn.byname.Person">
<property name="name">
<value>Well_Being</value>
</property>
</bean>
<bean id="studentServiceImpl" class="cn.csdn.byname.StudentServiceImpl" scope="singleton" parent="person"/>
<bean id="teacherServiceImpl" class="cn.csdn.byname.TeacherServiceImpl" scope="singleton" autowire="byName"></bean>
黄色区域代表两者的区别: