成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

簡單介紹Spring中接口注入的三種方式

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

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

Type1 接口注入

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

  1. public class ClassA {  
  2. private InterfaceB clzB;   
  3. public init() {Ojbect obj =Class.forName(Config.BImplementation).newInstance();   
  4. clzB = (InterfaceB)obj;  
  5. } ……   
  6. }  

 

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

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

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

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

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

Type2構(gòu)造子注入

構(gòu)造子注入,即通過構(gòu)造函數(shù)完成依賴關(guān)系的設(shè)定,如:

 

  1. public class DIByConstructor   
  2. {  
  3. private final DataSource dataSource;   
  4. private final String message;   
  5. public DIByConstructor(DataSource ds, String msg)   
  6. {   
  7. this.dataSource = ds; this.message = msg;   
  8. }  
  9. ……   
  10. }  

 

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

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

Type3設(shè)值注入

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

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

幾種依賴注入模式的對比總結(jié)

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

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

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

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

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

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

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

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

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

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

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

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

希望通過以上關(guān)于Spring中接口注入的三種方式的介紹,能夠給你帶來幫助。

責(zé)任編輯:于鐵 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-03 11:53:06

Spring接口

2012-07-17 09:16:16

SpringSSH

2021-10-26 00:01:59

Spring方式代碼

2009-07-20 15:08:41

Spring實例化Be

2022-01-17 08:19:51

Javascript 接口前端

2022-01-20 08:38:02

Java接口Lambda

2010-03-01 15:21:57

WCF死鎖

2024-07-01 12:42:58

2025-01-08 09:55:37

Spring接口數(shù)據(jù)庫

2010-02-04 10:33:40

C++異常傳遞

2024-10-14 09:20:09

異步流式接口

2010-04-20 12:00:01

負載均衡技術(shù)

2020-11-01 17:10:46

異步事件開發(fā)前端

2021-11-05 21:33:28

Redis數(shù)據(jù)高并發(fā)

2019-11-20 18:52:24

物聯(lián)網(wǎng)智能照明智能恒溫器

2014-12-31 17:42:47

LBSAndroid地圖

2021-06-24 08:52:19

單點登錄代碼前端

2021-11-23 10:30:35

Android技術(shù)代碼

2010-03-12 17:52:35

Python輸入方式

2023-12-19 16:43:01

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产一级一片免费播放 | 亚洲欧美中文日韩在线v日本 | 成人在线精品 | 天天操天天干天天爽 | av黄色免费在线观看 | 成人av网页 | 国产色在线 | 成人做爰www免费看视频网站 | 人和拘一级毛片c | 久草在线视频中文 | 一级做a爰片性色毛片 | 欧美成人精品激情在线观看 | 91在线免费观看 | 欧美亚州综合 | 欧美日韩国产一区二区三区 | 噜噜噜噜狠狠狠7777视频 | 成人毛片一区二区三区 | 久久里面有精品 | 国产高清精品一区二区三区 | 午夜精品久久久久久 | 在线免费看黄 | 日韩久久久久 | 一区二区三区四区在线播放 | 国产福利在线播放麻豆 | 日韩高清国产一区在线 | 综合国产| 一区欧美 | 国产一区二区三区四区hd | 日日欧美 | av一级久久 | 欧美色专区 | 亚洲精品黄色 | 九九热在线免费观看 | 影音av| 丁香综合 | 一起操网站 | 久久免费精品 | 9191av| 婷婷丁香激情 | 亚洲视频在线观看 | 久草.com |