Spring DI - 自動裝配



您已經學習瞭如何在 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 首先嚐試使用按建構函式自動裝配,如果失敗,Spring 嘗試按byType 自動裝配。

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

自動裝配的侷限性

在整個專案中一致地使用自動裝配效果最佳。如果通常不使用自動裝配,則僅使用它來連線一個或兩個 Bean 定義可能會使開發人員感到困惑。儘管自動裝配可以顯著減少指定屬性或建構函式引數的需求,但在使用自動裝配之前,您應該考慮其侷限性和缺點。

序號 侷限性及描述
1

覆蓋的可能性

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

2

原始資料型別

您不能自動裝配所謂的簡單屬性,例如原始型別、字串和類。

3

容易混淆的特性

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

廣告
© . All rights reserved.