自动装配之byName
自动装配之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" scope="singleton" parent="person"/>
??? <bean id="teacherServiceImpl" scope="singleton" autowire="byName"></bean>
?
黄色区域代表两者的区别: