Spring — 控制反轉與依賴注入原理

來源:互聯網
上載者:User

在Spring中有兩個非常重要的概念,那就是控制反轉和依賴注入;控制反轉將依賴對象的建立和管理交由Spring容器,而依賴注入則是在控制反轉的基礎上講Spring容器管理的依賴對象注入到應用之中;那麼控制反轉和依賴注入的原理到底是什麼呢?一言以蔽之,那就是:

XML檔案解析+Java反射技術;

只要我們瞭解了如何進行XML解析以及Java的反射技術,那麼我們完全可以實現自己的具有控制反轉和依賴注入功能的小“架構”;下面我將就這個問題進行一下討論。

首先是XML檔案解析,我們都知道目前很多Java開源架構都有自己的xml設定檔,例如Struts、Hibernate和Spring都有各自的設定檔。但是設定檔無論多麼複雜,簡單來說都和我們在N久以前使用的ini檔案差不多,他們的目標只有一個,那就是“配置”;應用程式中需要的一些資訊都被儲存在設定檔之中,應用程式通過讀取設定檔來獲得這些資訊,唯一不同的是,xml檔案由於其標準化、結構化、可擴充性等等優點,逐漸成為目前許多架構的設定檔的標準選項;當然,我們也應該認識到還是有一些其它選擇的,比如Hibernate就可以使用properties檔案作為設定檔;

那麼具體到今天要討論的Spring架構而言,對於設定檔的選擇是xml檔案。根據Spring的規範,設定檔的命名是沒有特殊要求的,只是在檔案的置放位置上有兩種選擇:類路徑下或者作業系統檔案目錄下,我想這不應該存在任何問題,我們絕大多數情況都應該把設定檔放置在類路徑之下,這我就不贅述了。

對於Spring的控制反轉和依賴注入來說,唯一使用到的是設定檔中的<bean>標籤,通過這個標籤,Spring就完成了對象的建立和依賴對象的注入工作;下面我們就來看看它到底是如何?的;

  • 首先對於設定檔中的<bean>節點,在Spring架構中存在一個對應的定義介面,叫做BeanDefinition;這個類定義了獲得在<bean>節點中出現的所有屬性的方法,例如className、scope等等;
  • 對於<bean>節點的子節點property則完成了屬性注入的功能;我們都知道,屬性注入有三種方式,那就是構造器注入、屬性setter方法注入和註解方式注入;
  • 如果是setter方式注入,對於類屬性xml設定檔也有兩種方法,一是使用property節點的ref屬性,一是使用property節點的子節點bean進行內部bean配置;如果是對於基礎資料型別 (Elementary Data Type)進行配置,那麼要使用property節點的value屬性;

搞清楚了以上的配置,那麼如果我們希望實現一個自己的“小架構”,那麼我們的步驟就是:

  1. 定義自己的關於bean節點、property節點的pojo類檔案;
  2. 使用諸如DOM4J等開源包將設定檔讀入;
  3. 使用Java的反射技術將設定檔中的資訊setter到我們需要的屬性中去;這裡面我們可能要使用到common-beanutils.jar包;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.