如何在Spring中自动连接构造函数和属性

时间:2011-07-11 08:45:37

标签: java spring dependency-injection

以下示例的行为与预期不符。如何自动连接构造函数和属性?我可以使用长袍或魔杖创建我的Wizard bean,但不能同时创建两者(没有明确的布线)。

以下是代码:

public static class Wizard {

    private final Robe robe;
    private Wand wand;

    public Wizard() { robe = null; }

    public Wizard(final Robe robe) { this.robe = robe; }

    public void setWand(final Wand wand) { this.wand = wand; }

    @Override
    public String toString() {
        return super.toString() + ", robe = " + robe + ", wand = " + wand;
    }
}

public static class Wand { }

public static class Robe { }

以下是我的常见bean定义:

<bean id="robe" class="org.hoipolloi.Foo.Robe" />
<bean id="wand" class="org.hoipolloi.Foo.Wand" />

现在,如果我这样配置向导:

<bean id="wizard" class="org.hoipolloi.Foo.Wizard" autowire="byType" />

长袍从未填充:

// Prints org.hoipolloi.Foo$Wizard@7c7e7c7e, robe = null, wand = org.hoipolloi.Foo$Wand@72887288
System.out.println(ctx.getBean("wizard"));

如果我通过构造函数切换到自动连接:

<bean id="wizard" class="org.hoipolloi.Foo.Wizard" autowire="constructor" />

然后我的巫师没有魔杖:

// Prints org.hoipolloi.Foo$Wizard@18381838, robe = org.hoipolloi.Foo$Robe@2cec2cec, wand = null
System.out.println(ctx.getBean("wizard"));

有没有办法自动连接向导bean,所以他有长袍和魔杖(即构造函数args和属性都是有线的)?

编辑:我应该注意,&#39; byName&#39;表现与&#39; byType&#39;相同即长袍是空的。

1 个答案:

答案 0 :(得分:1)

我不这么认为。或者为两者创建setter,或者在构造函数中包含两者。

您也可以使用注释代替自动自动装配。