Spring - 自動裝配 Bean



您已經學習瞭如何在 XML 配置檔案中使用 <bean> 元素宣告 Bean,以及使用 <constructor-arg> 和 <property> 元素注入 <bean>。

Spring 容器可以**自動裝配**協作 Bean 之間的關係,而無需使用 <constructor-arg> 和 <property> 元素,這有助於減少為大型基於 Spring 的應用程式編寫的 XML 配置量。

自動裝配模式

以下是自動裝配模式,可用於指示 Spring 容器對依賴項注入使用自動裝配。您可以使用 <bean/> 元素的 autowire 屬性為 Bean 定義指定**自動裝配**模式。

序號 模式及描述
1 no

這是預設設定,表示不進行自動裝配,您應該使用顯式 Bean 引用進行裝配。對於這種裝配,您無需做任何特殊操作。這正是您在依賴注入章節中已經看到的。

2 byName

按屬性名稱自動裝配。Spring 容器檢視在 XML 配置檔案中將 autowire 屬性設定為 byName 的 Bean 的屬性。然後,它嘗試將其屬性與配置檔案中定義的同名 Bean 進行匹配和裝配。

3 byType

按屬性資料型別自動裝配。Spring 容器檢視在 XML 配置檔案中將 autowire 屬性設定為 byType 的 Bean 的屬性。然後,如果其**型別**與配置檔案中完全匹配的一個 Bean 名稱相匹配,它將嘗試匹配和裝配該屬性。如果存在多個這樣的 Bean,則會丟擲一個致命異常。

4 constructor

類似於 byType,但型別適用於建構函式引數。如果容器中建構函式引數型別的 Bean 不止一個,則會引發致命錯誤。

5 autodetect

Spring 首先嚐試使用 autowire by constructor 進行裝配,如果失敗,則嘗試使用 autowire by byType 進行裝配。

您可以使用byTypeconstructor 自動裝配模式來裝配陣列和其他型別集合。

自動裝配的侷限性

當自動裝配在整個專案中一致使用時,效果最佳。如果通常不使用自動裝配,那麼開發人員僅使用它來裝配一兩個 Bean 定義可能會令人困惑。雖然自動裝配可以顯著減少指定屬性或建構函式引數的需要,但在使用它們之前,您應該考慮自動裝配的侷限性和缺點。

序號 侷限性及描述
1

覆蓋可能性

您仍然可以使用 <constructor-arg> 和 <property> 設定來指定依賴項,這將始終覆蓋自動裝配。

2

原始資料型別

您無法自動裝配所謂的簡單屬性,例如基本型別、字串和類。

3

容易混淆

自動裝配不如顯式裝配精確,因此,如果可能,請優先使用顯式裝配。

廣告