- Spring DI 教程
- Spring DI - 首頁
- Spring DI - 概述
- Spring DI - 環境搭建
- Spring DI - IOC 容器
- Spring 依賴注入
- Spring DI - 建立專案
- 基於構造器的注入示例
- Spring DI - 基於構造器的注入
- Spring DI - 內部 Bean 構造器注入
- Spring DI - 集合型別構造器注入
- Spring DI - 集合引用型別構造器注入
- Spring DI - Map 型別構造器注入
- Spring DI - Map 引用型別構造器注入
- 基於 Setter 方法的注入示例
- Spring DI - 基於 Setter 方法的注入
- Spring DI - 內部 Bean Setter 注入
- Spring DI - 集合型別 Setter 注入
- Spring DI - 集合引用型別 Setter 注入
- Spring DI - Map 型別 Setter 注入
- Spring DI - Map 引用型別 Setter 注入
- 自動裝配示例
- Spring DI - 自動裝配
- Spring DI - 按名稱自動裝配
- Spring DI - 按型別自動裝配
- Spring DI - 構造器自動裝配
- 工廠方法
- Spring DI - 靜態工廠方法
- Spring DI - 非靜態工廠方法
- Spring DI 有用資源
- Spring DI - 快速指南
- Spring DI - 有用資源
- Spring DI - 討論
Spring DI - 自動裝配
您已經學習瞭如何在 XML 配置檔案中使用 <bean> 元素宣告 Bean,並使用 <constructor-arg> 和 <property> 元素注入 <bean>。
Spring 容器可以自動裝配協作 Bean 之間的關聯關係,而無需使用 <constructor-arg> 和 <property> 元素,這有助於減少為大型基於 Spring 的應用程式編寫的 XML 配置量。
自動裝配模式
以下是自動裝配模式,可用於指示 Spring 容器使用自動裝配進行依賴注入。您可以使用 <bean/> 元素的 autowire 屬性為 Bean 定義指定自動裝配模式。
| 序號 | 模式及描述 |
|---|---|
| 1 |
no 這是預設設定,表示不進行自動裝配,您應該使用顯式 Bean 引用進行裝配。對於這種裝配,您無需進行任何特殊操作。這正是您在依賴注入章節中已經看到的。 |
| 2 |
按屬性名稱自動裝配。Spring 容器檢視在 XML 配置檔案中將autowire 屬性設定為byName 的 Bean 的屬性。然後,它嘗試匹配並將這些屬性與配置檔案中定義的同名 Bean 進行連線。 |
| 3 |
按屬性資料型別自動裝配。Spring 容器檢視在 XML 配置檔案中將autowire 屬性設定為byType 的 Bean 的屬性。然後,如果其型別與配置檔案中完全匹配的一個 Bean 名稱匹配,它將嘗試匹配並連線屬性。如果存在多個這樣的 Bean,則會丟擲致命異常。 |
| 4 |
類似於 byType,但型別應用於建構函式引數。如果容器中沒有完全一個建構函式引數型別的 Bean,則會引發致命錯誤。 |
| 5 | autodetect Spring 首先嚐試使用按建構函式自動裝配,如果失敗,Spring 嘗試按byType 自動裝配。 |
您可以使用byType 或constructor 自動裝配模式來連線陣列和其他型別集合。
自動裝配的侷限性
在整個專案中一致地使用自動裝配效果最佳。如果通常不使用自動裝配,則僅使用它來連線一個或兩個 Bean 定義可能會使開發人員感到困惑。儘管自動裝配可以顯著減少指定屬性或建構函式引數的需求,但在使用自動裝配之前,您應該考慮其侷限性和缺點。
| 序號 | 侷限性及描述 |
|---|---|
| 1 |
覆蓋的可能性 您仍然可以使用 <constructor-arg> 和 <property> 設定來指定依賴項,這些設定將始終覆蓋自動裝配。 |
| 2 |
原始資料型別 您不能自動裝配所謂的簡單屬性,例如原始型別、字串和類。 |
| 3 |
容易混淆的特性 自動裝配不如顯式裝配精確,因此,如果可能,請優先使用顯式裝配。 |