日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Spring中接口注入的三種方式

Spring中 接口注入的三種方式,上面的代碼中,ClassA依賴(lài)于InterfaceB的實(shí)現(xiàn),如何獲得InterfaceB實(shí)現(xiàn)類(lèi)的實(shí)例?傳統(tǒng)的方法是在代碼中創(chuàng)建InterfaceB實(shí)現(xiàn)類(lèi)的實(shí)例,并將起賦予clzB.

西峽網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)2013年開(kāi)創(chuàng)至今到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)

Type1 接口注入

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

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

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

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

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

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

Apache Avalon是一個(gè)典型的Type1型IOC容器。

Type2構(gòu)造子注入

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

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

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

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

Type3設(shè)值注入

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

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

幾種依賴(lài)注入模式的對(duì)比總結(jié)

接口注入模式因?yàn)榫邆淝秩胄?,它要求組件必須與特定的接口相關(guān)聯(lián),因此并不被看好,實(shí)際使用有限。

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

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

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

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

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

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

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

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

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

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

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


網(wǎng)頁(yè)題目:Spring中接口注入的三種方式
分享網(wǎng)址:http://www.5511xx.com/article/cosciio.html