public class B {
public B(){
System.out.println("B is created");
}
public void print(){
System.out.println("hello b");
}
}
班B.java
public class A {
B c;
public A(){
System.out.println("a is created");
}
public B getB(){
return c;
}
public void setB(B c){
this.c =c;
}
void print(){
System.out.println("hello a");
}
void display(){
print();
c.print();
}
}
类A.java
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="b" class="B"></bean>
<bean id="a" class="A" autowire="byName"></bean>
</beans>
的applicationContext.xml
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationcontext.xml");
A a1 = context.getBean("a",A.class);
a1.display();
}
}
测试.java
我正在使用&#34; byName&#34;浏览春季自动装配的教程。模式。并且它说 - byName模式根据bean的名称注入对象依赖项。在这种情况下,属性名称和bean名称必须相同。它内部调用setter方法。
但是在这个应用程序中,属性名称和bean名称都不同但它仍然可以正常工作,所以即使这两个名称不同,这种自动装配的工作原理是什么?
答案 0 :(得分:2)
它表示属性名称,而不是字段名称。
在这种情况下,属性名称是由JavaBeans命名约定(setB
- &gt; b
)定义的setter方法名称推断出来的,因此属性名称和bean名称相同。