
- Spring 核心基礎
- Spring - 首頁
- Spring - 概覽
- Spring - 架構
- Spring - 環境設定
- Spring - Hello World 示例
- Spring - IoC 容器
- Spring - Bean 定義
- Spring - Bean 作用域
- Spring - Bean 生命週期
- Spring - Bean 後處理器
- Spring - Bean 定義繼承
- Spring - 依賴注入
- Spring - 注入內部 Bean
- Spring - 注入集合
- Spring - 自動裝配 Bean
- 基於註解的配置
- Spring - 基於 Java 的配置
- Spring - Spring 中的事件處理
- Spring - Spring 中的自定義事件
- Spring - 使用 Spring 框架進行 AOP
- Spring - JDBC 框架
- Spring - 事務管理
- Spring - Web MVC 框架
- Spring - 使用 Log4J 進行日誌記錄
- Spring 問題與解答
- Spring - 問題與解答
- Spring 有用資源
- Spring - 快速指南
- Spring - 有用資源
- Spring - 討論
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 進行裝配。 |
您可以使用byType 或constructor 自動裝配模式來裝配陣列和其他型別集合。
自動裝配的侷限性
當自動裝配在整個專案中一致使用時,效果最佳。如果通常不使用自動裝配,那麼開發人員僅使用它來裝配一兩個 Bean 定義可能會令人困惑。雖然自動裝配可以顯著減少指定屬性或建構函式引數的需要,但在使用它們之前,您應該考慮自動裝配的侷限性和缺點。
序號 | 侷限性及描述 |
---|---|
1 |
覆蓋可能性 您仍然可以使用 <constructor-arg> 和 <property> 設定來指定依賴項,這將始終覆蓋自動裝配。 |
2 |
原始資料型別 您無法自動裝配所謂的簡單屬性,例如基本型別、字串和類。 |
3 |
容易混淆 自動裝配不如顯式裝配精確,因此,如果可能,請優先使用顯式裝配。 |