春季自动装配(属性名称和bean名称必须相同)

时间:2014-11-18 15:23:17

标签: java spring autowired

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名称都不同但它仍然可以正常工作,所以即使这两个名称不同,这种自动装配的工作原理是什么?

1 个答案:

答案 0 :(得分:2)

它表示属性名称,而不是字段名称

在这种情况下,属性名称是由JavaBeans命名约定(setB - &gt; b)定义的setter方法名称推断出来的,因此属性名称和bean名称相同。