Spring Bean容器中的首选顺序

时间:2016-11-29 08:33:18

标签: java spring dependency-injection

当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());
    }
}

所以我的查询是:

  1. 它是否始终是给定首选项的setter注入,或者有一些属性可以定义它。
  2. 为什么Setter注入优先于构造函数注入

1 个答案:

答案 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覆盖该属性。

希望它有所帮助。