以下示例的行为与预期不符。如何自动连接构造函数和属性?我可以使用长袍或魔杖创建我的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;相同即长袍是空的。
答案 0 :(得分:1)
我不这么认为。或者为两者创建setter,或者在构造函数中包含两者。
您也可以使用注释代替自动自动装配。