2011-07-11 66 views
1

以下示例的行爲與預期不符。我如何自動連線構造函數和屬性?我可以用長袍或魔杖創建我的巫術豆,但不能同時使用(沒有明確的佈線)。如何在Spring中自動連接構造函數和屬性

下面的代碼:

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 [email protected], robe = null, wand = [email protected] 
System.out.println(ctx.getBean("wizard")); 

如果我通過構造切換到自動連線:

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

然後我的嚮導沒有魔杖:

// Prints [email protected], robe = [email protected], wand = null 
System.out.println(ctx.getBean("wizard")); 

有沒有什麼辦法自動裝配精靈豆所以他有兩個長袍和魔杖(即構造函數的參數和屬性都是有線的)?

編輯:我應該注意,'byName'的行爲與'byType'相同,即長袍爲空。

+0

您是否嘗試過在您的構造函數和setter上設置@Autowired註解? –

+0

有趣的是,我發現在[Spring XML配置的十二個最佳實踐](http://onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration)中強烈反對自動裝配投票-best-practices.html) –

+1

@Andreas是的,但那是從2006年開始的。自那以後很多變了! –

回答

1

我不這麼認爲。要麼爲兩者創建setter,要麼在構造函數中包含兩者。

您也可以使用註釋代替自動自動裝配。

+0

謝謝。我正在通過「Spring in Action」工作,但還沒有註釋部分。我會盡快嘗試。 – hoipolloi

相關問題