当setter和构造函数注入应用于同一个类时,我需要知道什么是首选顺序。
我写了一个演示代码,发现它优先考虑setter注入。
<bean id="wolf" class="com.sac.DI.Wolf" />
<bean id="lion" class="com.sac.DI.Lion" />
<bean id="zoo" class="com.sac.DI.Zoo">
<constructor-arg ref="lion" />
<property name="wild" ref="wolf" />
</bean>
Zoo bean如下所示。
package com.sac.DI;
public class Zoo {
private WildAnimal wild;
public Zoo(WildAnimal animal) {
this.wild = animal;
}
public void setWild(WildAnimal wild) {
this.wild = wild;
}
public void testSound() {
System.out.println(wild.sound());
}
}
所以我的查询是:
答案 0 :(得分:0)
使用注释代替xml配置,您可以更清楚地看到M.Deinum所说的内容:
@Configuration
public class Config {
@Bean
public WildAnimal wolf(){
return new Wolf();
}
@Bean
public WildAnimal lion(){
return new Lion();
}
@Bean
public Zoo zoo(){
Zoo zoo = new Zoo(lion());
zoo.setWild(wolf());
return zoo;
}
}
首先,使用构造函数注入创建一个对象,然后使用setter injection覆盖该属性。
希望它有所帮助。