成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Spring中接口注入的方式有哪些

這篇文章主要講解了“Spring中接口注入的方式有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Spring中接口注入的方式有哪些”吧!

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供饒河網(wǎng)站建設、饒河做網(wǎng)站、饒河網(wǎng)站設計、饒河網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、饒河企業(yè)網(wǎng)站模板建站服務,十余年饒河做網(wǎng)站經驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。

Spring框架是一個分層架構,由 7 個定義良好的模塊組成。Spring 模塊構建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理 bean 的方式。下面介紹Spring中接口注入的三種方式。

Type1 接口注入

我們常常借助接口來將調用者與實現(xiàn)者分離。如:

public class ClassA {  private InterfaceB clzB;   public init() {Ojbect obj =Class.forName(Config.BImplementation).newInstance();   clzB = (InterfaceB)obj;  } ……   }

上面的代碼中,ClassA依賴于InterfaceB的實現(xiàn),如何獲得InterfaceB實現(xiàn)類的實例?傳統(tǒng)的方法是在代碼中創(chuàng)建InterfaceB實現(xiàn)類的實例,并將起賦予clzB.

而這樣一來,ClassA在編譯期即依賴于InterfaceB的實現(xiàn)。為了將調用者與實現(xiàn)者在編譯期分離,于是有了上面的代碼,我們根據(jù)預先在配置文件中設定的實現(xiàn)類的類名,動態(tài)加載實現(xiàn)類,并通過InterfaceB強制轉型后為ClassA所用。

這就是接口注入的一個最原始的雛形。

而對于一個Type1型IOC容器而言,加載接口實現(xiàn)并創(chuàng)建其實例的工作由容器完成,如J2EE開發(fā)中常用的Context.lookup(ServletContext.getXXX),都是Type1型IOC的表現(xiàn)形式。

Apache Avalon是一個典型的Type1型IOC容器。

Type2構造子注入

構造子注入,即通過構造函數(shù)完成依賴關系的設定,如:

public class DIByConstructor   {  private final DataSource dataSource;   private final String message;   public DIByConstructor(DataSource ds, String msg)   {   this.dataSource = ds; this.message = msg;   }  ……   }

可以看到,在Type2類型的依賴注入機制中,依賴關系是通過類構造函數(shù)建立,容器通過調用類的構造方法,將其所需的依賴關系注入其中。

PicoContainer(另一種實現(xiàn)了依賴注入模式的輕量級容器)首先實現(xiàn)了Type2類型的依賴注入模式。

Type3設值注入

在各種類型的依賴注入模式中,設值注入模式在實際開發(fā)中得到了最廣泛的應用(其中很大一部分得力于Spring框架的影響)。

在筆者看來,基于設置模式的依賴注入機制更加直觀、也更加自然。Quick Start中的示例,就是典型的設置注入,即通過類的setter方法完成依賴關系的設置。

幾種依賴注入模式的對比總結

接口注入模式因為具備侵入性,它要求組件必須與特定的接口相關聯(lián),因此并不被看好,實際使用有限。

Type2 構造子注入的優(yōu)勢:

1、“在構造期即創(chuàng)建一個完整、合法的對象”,對于這條Java設計原則,Type2無疑是***的響應者。

2、避免了繁瑣的setter方法的編寫,所有依賴關系均在構造函數(shù)中設定,依賴關系集中呈現(xiàn),更加易讀。

3、由于沒有setter方法,依賴關系在構造時由容器一次性設定,因此組件在被創(chuàng)建之后即處相對“不變”的穩(wěn)定狀態(tài),無需擔心上層代碼在調用過程中執(zhí)行setter方法對組件依賴關系產生破壞,特別是對于Singleton模式的組件而言,這可能對整個系統(tǒng)產生重大的影響。

4、同樣,由于關聯(lián)關系僅在構造函數(shù)中表達,只有組件創(chuàng)建者需要關心組件內部的依賴關系。對調用者而言,組件中的依賴關系處于黑盒之中。對上層屏蔽不必要的信息,也為系統(tǒng)的層次清晰性提供了保證。

5、通過構造子注入,意味著我們可以在構造函數(shù)中決定依賴關系的注入順序,對于一個大量依賴外部服務的組件而言,依賴關系的獲得順序可能非常重要,比如某個依賴關系注入的先決條件是組件的DataSource及相關資源已經被設定。

Type3設值注入的優(yōu)勢

1、對于習慣了傳統(tǒng)JavaBean開發(fā)的程序員而言,通過setter方法設定依賴關系顯得更加直觀,更加自然。

2、如果依賴關系(或繼承關系)較為復雜,那么Type2模式的構造函數(shù)也會相當龐大(我們需要在構造函數(shù)中設定所有依賴關系),此時Type3模式往往更為簡潔。

3、對于某些第三方類庫而言,可能要求我們的組件必須提供一個默認的構造函數(shù)(如Struts中的Action),此時Type2類型的依賴注入機制就體現(xiàn)出其局限性,難以完成我們期望的功能。

可見,Type2和Type3模式各有千秋,而Spring、PicoContainer都對Type2和Type3類型的依賴注入機制提供了良好支持。這也就為我們提供了更多的選擇余地。理論上,以Type2類型為主,輔之以Type3類型機制作為補充,可以達到***的依賴注入效果,不過對于基于Spring Framework開發(fā)的應用而言,Type3使用更加廣泛。

感謝各位的閱讀,以上就是“Spring中接口注入的方式有哪些”的內容了,經過本文的學習后,相信大家對Spring中接口注入的方式有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!

分享標題:Spring中接口注入的方式有哪些
鏈接分享:http://jinyejixie.com/article4/gggsie.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、電子商務云服務器、企業(yè)建站、動態(tài)網(wǎng)站、面包屑導航

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
武川县| 文昌市| 嘉鱼县| 垦利县| 丁青县| 克拉玛依市| 桂阳县| 桂阳县| 济源市| 马关县| 康定县| 克什克腾旗| 资源县| 湘乡市| 会同县| 安远县| 射阳县| 南皮县| 宜川县| 上思县| 合川市| 隆化县| 西宁市| 桃江县| 海兴县| 栖霞市| 临洮县| 永安市| 蓬溪县| 探索| 泰兴市| 遂宁市| 新竹县| 额尔古纳市| 云浮市| 美姑县| 林周县| 彭阳县| 和田市| 新河县| 景东|