java如何在Spring中自动连接构造函数和属性
以下示例的行为与预期不符。如何自动连接构造函数和属性?我可以用一件长袍或一根魔杖来创建我的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,使其同时拥有robe和wand(即,构造函数参数和属性都已连接)
编辑:我应该注意,“byName”的行为与“byType”相同,即robe为null
# 1 楼答案
我不这么认为。或者为这两个都创建setter,或者在构造函数中同时包含这两个setter
也可以使用注释代替自动关联