有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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

    也可以使用注释代替自动关联