Spring 基於自動裝配的依賴注入詳解 [自動裝配模式搞不懂?來看就完了!!!][autowire 屬性值詳解][自動裝配的 6 種模式]

您的“關注”和“點贊”,是信任,是認可,是支持,是動力…

如意見相佐,可留言。
本人必將竭盡全力試圖做到準確和全面,終其一生進行修改補充更新。

1 Spring 基於自動裝配的依賴注入概述

其他依賴注入的方式請參見博文《Spring 依賴注入(DI)詳解 》

Spring 爲我們提供了一個自動裝配的機制。操作概述如下所示:

  • 在類中提供依賴對象的setter方法,依賴項爲setter方法參數。constructor模式不需要,因爲依賴項是構造器參數。
  • 在 Spring 的配置文件中定義 Bean 時,<bean> 標籤有一個autowire屬性,autowire屬性值有 6 種,接下來會逐一進行介紹。可以通過這個屬性來讓 Spring 容器爲接受管理的 Bean 自動注入依賴對象。
    例如:<bean id="標識名" class="全限定類名" autowire="autowire屬性值"/>

如以上操作,就可以完成自動裝配,就不用在配置文件中使用<property>標籤或<constructor-arg>標籤來描述 Bean 之間的依賴關係了。Spring 容器會自動建立 Bean 之間的依賴關係。

有效的解決了配置文件可能會出現“臃腫”的問題,使代碼整潔、美觀。

autowire屬性值有如下 6 種(也可叫做 6 種自動裝配模式):

  • no:默認的設置,表示不啓用自動裝配。需要顯式裝配 Bean。
  • byName:按名稱自動裝配。可以這麼來理解,Spring 容器在管理一個類時,在配置文件中添加 Bean 的 autowire屬性,並把屬性值設置爲byName;在 Java 代碼中對應的有一個類,類中得有 setXxx(依賴項參數)方法。Spring 容器會嘗試將它的屬性(指的是依賴項參數)與配置文件中其他定義爲相同名稱(id值 或 name值)的 Bean 進行匹配,如果找到匹配項,Spring 容器會將這些 Bean 實例注入到擁有autowire=byName屬性的 Bean 中。如果沒匹配成功,將拋出異常,依賴項參數爲null
  • byType:按類型自動裝配。可以這麼來理解,Spring 容器在管理一個類時,在配置文件中添加 Bean 的 autowire屬性,並把屬性值設置爲byType;在 Java 代碼中對應的有一個類,類中得有 setXxx(依賴項參數)方法。Spring 容器會嘗試將它的屬性(指的是依賴項參數)類型與配置文件中其他定義爲相同類型(class值)的 Bean 進行匹配,如果找到不止一個匹配項,將拋出異常;如果沒有找到匹配項,依賴項參數爲null
  • constructor:與 byType 模式相似,不同之處在與它應用於構造器參數(依賴項),如果在容器中沒有找到與構造器參數類型一致的 Bean,那麼將拋出異常。(其實就是根據構造器參數的數據類型,進行 byType 模式的自動裝配。)
  • autodetect:通過 Bean 類的自省機制(introspection)來決定是使用 constructor模式還是 byType模式進行自動裝配。Spring 首先嚐試通過 constructor 的模式自動裝配,如果它不執行;Spring 再嘗試通過 byType 的模式來自動裝配。
  • default:設置上級標籤<beans>default-autowire屬性定義裝配模式。

2 自動裝配的侷限性

  • 不是所有類型都可以使用自動裝配,不能自動裝配的數據類型有:Object、基本數據類型(Date、CharSequence、Number、URI、URL、Class、str)等等。
  • 自動裝配不如顯示裝配精確,如果可能的話儘量使用顯式裝配。

3 案例實操,走你

主要演示byNamebyTypeconstructor三種模式,因爲學會了這三種,其他的模式也都能搞定了。

3.1 案例:byName 模式

第一步:創建Teacher類。內容如下圖所示:

在這裏插入圖片描述
第二步:創建Staff類。內容如下圖所示:

在這裏插入圖片描述
第三步:創建配置文件。內容如下所示:

在這裏插入圖片描述
第四步:創建測試類和 JUnit 運行測試。內容如下圖所示:

在這裏插入圖片描述

3.2 案例:byType 模式

第一步:創建Teacher類。內容如下圖所示:

在這裏插入圖片描述
第二步:創建Staff類。內容如下圖所示:

在這裏插入圖片描述
第三步:創建配置文件。內容如下所示:

在這裏插入圖片描述
第四步:創建測試類和 JUnit 運行測試。內容如下圖所示:

在這裏插入圖片描述

3.3 案例:constructor 模式

第一步:創建Teacher類。內容如下圖所示:

在這裏插入圖片描述
第二步:創建Staff類。內容如下圖所示:

在這裏插入圖片描述
第三步:創建配置文件。內容如下所示:

在這裏插入圖片描述
第四步:創建測試類和 JUnit 運行測試。內容如下圖所示:

在這裏插入圖片描述

【文章其他地址】

微信公衆號:碼農阿杰

博客園

【參考資料】

spring

Artifact Repository Browser

Apache Commons

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章