根据Spring 4.1.6到文档自动装配byType

时间:2015-04-24 22:53:56

标签: spring spring-4

如果容器中只存在一个属性类型的bean,则允许自动装配属性。如果存在多个,则抛出致命异常,这表示您不能对该bean使用byType自动装配。如果没有匹配的bean,则没有任何反应;该物业未设定。 - 来自SPRING REFERENCE GUID 4.1.6

<bean id="person" class="autowire.Person" autowire="byType" />

<bean id="invisible" class="autowire.Ability" >
    <property name="skill" value="Invisible" />
</bean>

<bean id="invisible2" class="autowire.Ability" >
    <property name="skill" value="Invisible" />
</bean>

班级定义:

package autowire;

public class Person 
{
private Ability ability;
//...
}

package autowire;

public class Ability {

    private String skill;

    public String getSkill() {
        return skill;
    }

    public void setSkill(String skill) {
        this.skill = skill;
    }

}

我能够定义2个相同类型的类“autowire.Ability”的bean。我没有得到致命的例外。我的理解是否正确?

1 个答案:

答案 0 :(得分:1)

你几乎就在那里(得到错误)。你需要告诉spring哪些类属性需要自动装配。使用@Autowired注释Person.ability,你应该得到错误。

import org.springframework.beans.factory.annotation.Autowired;

public class Person 
{
  @Autowired
  private Ability ability;
  //...
}

或者甚至更好地创建一个构造函数并自动装配它,因为注入属性被认为是一种不好的做法。

public class Person 
{
  private Ability ability;

  @Autowired
  public Person(Ability ability) {
    this.ability = ability;
  }
  //...
}

Spring并不假设需要注入哪些属性(自动装配),因此您需要指定要注入的属性。