2013-01-17 74 views
1

在我發現的所有自動裝配的例子中,該例子是關於一個<bean>autowire屬性,其被設置爲例如byName,並且只有一個屬性值應該通過自動裝配來設置。春天:如何通過自動裝配設置多個屬性?

我的問題是如果一個<bean>有多個屬性,你想通過自動裝配設置?似乎沒有人解釋這種情況。有人可以解釋我是否可以或者如果我應該使用autowire在bean中設置多個屬性?下面是我想通過自動裝配來設置客戶豆的帳戶和信用性質的這種情況的一個例子:

<beans> 
    <bean name="customer" class="ultratech.com.Customer" autowire="byName"> 
     <bean name="account"/> 
     <bean name="credit> 
    </beam> 

    <bean name="account" class="ultratech.com.Account"/> 
    <bean name="credit" class="ultratech.com.Credit"/> 
</beans> 

另外,請糾正我,如果我錯了,但如果我是用註釋(@Autowire),那麼我的問題很容易解決,因爲我可以將@Autowire分別添加到bean的任何屬性。

+0

您的意思是引線通過XML豆權在這種情況下,這是不是自動裝配,這只是佈線,因爲你必須手動完成;) – theadam

+0

bean中的多個屬性?或多個值?由於Spring無法解決關聯的問題,因此多個值肯定會失敗。所以請解釋一個示例代碼片段。 –

+0

我已經添加了一個例子來明確我的問題。 – user1888243

回答

2

[編輯:編輯,以反映上更新問題]

你提的問題是很多更清晰現在。你似乎認爲(如果我按照你的想法正確地),在autowire="byName"你應該提供一個bean名稱,而不是byName值。 這是不正確的。 autowire屬性可以採用幾個可能的值,byName就是其中之一。當您設置autowirebyName喜歡這裏:

<bean name="someBean" class="foo.bar.Baz" autowire="byName /> 

Spring會看所有的字段someBeanfoo.bar.Baz類),並嘗試連線上每一個名字來此對象的所有領域。也就是說(在你的情況中),如果一個Customer類有一個字段account,Spring將查看它的上下文並嘗試找到名爲account的bean來注入Customer bean。

如果定義了兩個這樣的豆類:

<bean name="customer" class="ultratech.com.Customer" autowire="byName" /> 
<bean name="account" class="ultratech.com.Account" /> 

那麼你是好,如果客戶是沿着這條線的類:

public class Customer { 
    (...) 
    private Account account; 
    (...) 
} 

這是你的XML代碼段應該是什麼樣子,假設您的客戶類別具有名爲account和credit的字段:

<beans> 
    <bean name="customer" class="ultratech.com.Customer" autowire="byName" /> 
    <bean name="account" class="ultratech.com.Account" /> 
    <bean name="credit" class="ultratech.com.Credit" /> 
</beans> 

除了「byNam E」自動連接,你可以自動裝配:

  1. 沒有 - 默認 - 沒有自動裝配
  2. byType的 - 尋找物業類型的豆 - 警惕,但 - 只有一個此類型的bean是允許自動裝配byType的;如果有多於一個,則會引發異常
  3. 構造函數 - 與byType一樣工作,但只查找構造函數參數;所有的構造函數的參數必須滿足與各個類型的只有一個豆

更多信息請參見Spring參考: http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/beans.html#beans-factory-autowire