<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    shenang博客技術(shù)文檔


    理論不懂就實(shí)踐,實(shí)踐不會(huì)就學(xué)理論!

    posts - 35,comments - 55,trackbacks - 0
     

    Sping三種注入方式

                                                                           (本文摘自夏昕:開發(fā)指南)

    依賴注入的三種實(shí)現(xiàn)形式

    我們將組件的依賴關(guān)系由容器實(shí)現(xiàn),那么容器如何知道一個(gè)組件依賴哪些其它的組件呢?這些回調(diào)方法會(huì)告知容器它所依賴的組件。根據(jù)回調(diào)方法的不同,我們可以將IoC分為三種形式:

    1、 接口注入

     簡(jiǎn)單的說(shuō),接口注入就是在運(yùn)行期,加載接口實(shí)現(xiàn)并創(chuàng)建其實(shí)例的工作由容器完成。

    如下面這個(gè)類:

    public class ClassA {

    private InterfaceB clzB;

       public Object doSomething(InterfaceB b) {

         clzB = b;

          return clzB.doIt();

        }

     ……

    }

    在運(yùn)行期,InterfaceB實(shí)例將由容器提供。

    Type1IOC發(fā)展較早(有意或無(wú)意) ,在實(shí)際中得到了普遍應(yīng)用,即使在IOC的概念尚未確立時(shí),這樣的

    方法也已經(jīng)頻繁出現(xiàn)在我們的代碼中。

    下面的代碼大家應(yīng)該非常熟悉:

    public class MyServlet extends HttpServlet {

     public void doGet(

    HttpServletRequest request, 

    HttpServletResponse response)

         throws ServletException, IOException {

       ……

     }

    }   SpringFrameWork Developer’s Guide Version 0.6

    這也是一個(gè)Type1 型注入,HttpServletRequestHttpServletResponse實(shí)例由Servlet Container

    在運(yùn)行期動(dòng)態(tài)注入。

    另,Apache Avalon是一個(gè)較為典型的Type1IOC容器。

    2、 設(shè)置注入

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

    基于設(shè)置模式的依賴注入機(jī)制更加直觀、也更加自然。前面的用戶注冊(cè)示例,就是典

    型的設(shè)置注入,即通過(guò)類的setter方法完成依賴關(guān)系的設(shè)置。

    3、 構(gòu)造子函數(shù)注入

    Type3 構(gòu)造子注入

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

    public class DIByConstructor {

       private final DataSource dataSource;

       private final String message;

       public DIByConstructor(DataSource ds, String msg) {

         this.dataSource = ds;

         this.message = msg;

        }

     ……

    }

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

    造方法,將其所需的依賴關(guān)系注入其中。

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

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

    接口注入模式因?yàn)闅v史較為悠久,在很多容器中都已經(jīng)得到應(yīng)用。但由于其在靈活性、易用性上不如其他兩種注入模式,因而在IOC的專題世界內(nèi)并不被看好。

    Type2Type3型的依賴注入實(shí)現(xiàn)則是目前主流的IOC實(shí)現(xiàn)模式。這兩種實(shí)現(xiàn)方式各有特點(diǎn),也各具優(yōu)勢(shì)(一句經(jīng)典廢話) 。

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

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

    觀,更加自然。

    2 如果依賴關(guān)系(或繼承關(guān)系)較為復(fù)雜,那么Type3模式的構(gòu)造函數(shù)也會(huì)相當(dāng)龐大(我們需

    要在構(gòu)造函數(shù)中設(shè)定所有依賴關(guān)系) ,此時(shí)Type2模式往往更為簡(jiǎn)潔。

    3 對(duì)于某些第三方類庫(kù)而言,可能要求我們的組件必須提供一個(gè)默認(rèn)的構(gòu)造函數(shù)(如Struts

    中的Action ,此時(shí)Type3類型的依賴注入機(jī)制就體現(xiàn)出其局限性,難以完成我們期望的功

    能。

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

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

    響應(yīng)者。

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

    更加易讀。

    3 由于沒(méi)有setter方法,依賴關(guān)系在構(gòu)造時(shí)由容器一次性設(shè)定,因此組件在被創(chuàng)建之后即處于

    相對(duì)“不變”的穩(wěn)定狀態(tài),無(wú)需擔(dān)心上層代碼在調(diào)用過(guò)程中執(zhí)行setter方法對(duì)組件依賴關(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)部的依賴關(guān)系。

    對(duì)調(diào)用者而言,組件中的依賴關(guān)系處于黑盒之中。對(duì)上層屏蔽不必要的信息,也為系統(tǒng)的

    層次清晰性提供了保證。

    5 通過(guò)構(gòu)造子注入,意味著我們可以在構(gòu)造函數(shù)中決定依賴關(guān)系的注入順序,對(duì)于一個(gè)大量

    依賴外部服務(wù)的組件而言,依賴關(guān)系的獲得順序可能非常重要,比如某個(gè)依賴關(guān)系注入的

    先決條件是組件的DataSource及相關(guān)資源已經(jīng)被設(shè)定。

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

    posted on 2009-03-23 10:38 重慶理工小子 閱讀(1241) 評(píng)論(0)  編輯  收藏 所屬分類: Spring2
    主站蜘蛛池模板: 精品亚洲永久免费精品| 全黄性性激高免费视频| 亚洲婷婷五月综合狠狠爱| 色多多www视频在线观看免费| 国产自产拍精品视频免费看| 亚洲永久网址在线观看| 女人张开腿给人桶免费视频 | 亚洲精品国产精品国自产观看| 色片在线免费观看| 亚洲国产V高清在线观看| 美女无遮挡拍拍拍免费视频| 国产免费av片在线看| 亚洲18在线天美| 久久不见久久见中文字幕免费| 亚洲欧洲日产专区| 国产在线观看免费观看不卡| 亚洲色大成网站www尤物| 免费中文字幕一级毛片| 51午夜精品免费视频| 亚洲av鲁丝一区二区三区| 国产亚洲Av综合人人澡精品| 7723日本高清完整版免费| 最新国产精品亚洲| 五月婷婷亚洲综合| 亚洲一区二区三区在线观看蜜桃| 2020久久精品国产免费| 亚洲AV无码一区二区乱子仑| 2048亚洲精品国产| 一级毛片无遮挡免费全部| 亚洲国产精品一区二区第一页| 亚洲综合免费视频| 亚洲AV乱码久久精品蜜桃| 久久天天躁狠狠躁夜夜免费观看 | 免费v片在线观看无遮挡| 无码精品人妻一区二区三区免费| 亚洲AV无码专区国产乱码电影| 中国一级特黄的片子免费| 亚洲美日韩Av中文字幕无码久久久妻妇 | 亚洲白色白色永久观看| 久久久精品免费国产四虎| 国产亚洲精aa成人网站|