【发布时间】:2014-11-18 15:23:17
【问题描述】:
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
我正在使用“byName”模式阅读有关春季自动装配的教程。它说 - byName 模式根据 bean 的名称注入对象依赖项。在这种情况下,属性名称和 bean 名称必须相同。它在内部调用 setter 方法。
但在这个应用程序中,属性名称和 bean 名称都不同,但它仍然可以正常工作,那么即使两个名称不同,这种自动装配是如何工作的?
【问题讨论】:
-
问题是什么? .. 无论如何都可以正常工作,因为您必须在 A 类中使用 setB 方法,该方法隐式地指向名为 b 的属性。