【问题标题】:Autowiring in spring (property name and bean name must be same)春季自动装配(属性名称和bean名称必须相同)
【发布时间】: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 的属性。

标签: java spring autowired


【解决方案1】:

它说的是属性名称,而不是字段名称

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

【讨论】:

  • wait axtavt ,所以这意味着命名约定应该只匹配不匹配属性名称和bean名称的确切单词?
  • JavaBeans naming conventions 链接属性名称和该属性的设置器名称。因此,在您的情况下,属性名称是从设置器名称派生的。
猜你喜欢
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
相关资源
最近更新 更多