我是Spring的新手。当前从xml配置开始,所以请不要说使用注释。 我在读有关自动装配'byName'的文章,我对它的工作方式感到困惑。
我的配置文件-
<bean name="StudentRepositor"
class="com.sample.Repository.StudentRepositoryHibernate"/>
<bean name="StudentService"
class="com.sample.Service.StudentServiceQuery" autowire="byName">
<!--<property name="StudentRepositor" ref="StudentRepositor" />-->
</bean>
StudentServiceQuery类-
public class StudentServiceQuery implements StudentService {
private StudentRepository studentRepositor;
public void displayList() {
List<Student> studentList = studentRepositor.returnList();
System.out.println(studentList.get(0).toString());
}
public void setStudentRepositor(StudentRepository studentRepositor) {
System.out.println("Dependency Injection - Setter");
this.studentRepositor = studentRepositor;
}
}
Bean名称为“ StudentRepositor ”的类的名称为“ StudentRepository ”
当正确拼写bean名称(StudentRepository)时,自动装配正确工作。 setter方法为setStudentRepository,因此调用该方法进行setter注入。
当我拼写错误的bean名称(StudentRepositor)时,如果我使用property来引用该类,那么它将起作用。但是当我做“自动装配byName”时,它失败了。设置方法是setStudentRepositor
byType自动装配每次都有效。
那么为什么自动装配byName会失败,如第2点所述。
答案 0 :(得分:2)
在声明bean时:
<bean name="StudentRepositor"
class="com.sample.Repository.StudentRepositoryHibernate"/>
bean的名称不应与类的名称相似,它可以是任何
将那些声明的bean注入另一个bean时:
<bean name="StudentService"
class="com.sample.Service.StudentServiceQuery" autowire="byName">
<property name="StudentRepositor" ref="StudentRepositor" />
</bean>
引用必须与您声明的Bean名称部分相同,因此,如果名称是StudentRepositor,则引用应相同(StudentRepositor)
对于注入时的属性名称,它应该与类中的属性名称相同
所以,如果您有这样的课程:
public class A{
private StudentRepositor b;
}
您的xml文件中的属性名称应为“ b”:
<bean name="StudentService"
class="com.sample.Service.StudentServiceQuery" autowire="byName">
<property name="b" ref="StudentRepositor" />
</bean>