如果容器中只存在一个属性类型的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。我没有得到致命的例外。我的理解是否正确?
答案 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并不假设需要注入哪些属性(自动装配),因此您需要指定要注入的属性。