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

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

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

    Dict.CN 在線詞典, 英語學習, 在線翻譯

    都市淘沙者

    荔枝FM Everyone can be host

    統計

    留言簿(23)

    積分與排名

    優秀學習網站

    友情連接

    閱讀排行榜

    評論排行榜

    什么是Ioc(Inversion of Control) (zhuan)

    這篇短文基本上是改編自Martin Fowler的Inversion of Control Containers and the Dependency Injection pattern,目的呢,是讓讀者能夠在最短時間內了解IoC的概念。這也是我一貫的“風格”:最短的文字、最精要的內容、最清晰的說明。希望我能做到,自勉^_^


    J2EE應用開發中,經常遇到的問題就是:如何將不同的組件組裝成為一個內聚的應用程序?IoC模式可以解決這個問題,其目標是將組件的配置與使用分離開。

    IoCInversion of Control,控制反轉[1],其原理是基于OO設計原則的The Hollywood PrincipleDon't call us, we'll call you。也就是說,所有的組件[2]都是被動的(Passive),所有的組件初始化和調用都由容器負責。組件處在一個容器當中,由容器負責管理。

    要說明IoC模式最好的方法是使用代碼。下邊是一段正常的代碼。

    class ClassA...

      public String aMethod(String arg){

        String result = instanceOfClassB.bMethod();

        do something;

        return result;

      }

    在上邊的代碼里,我們要解決的問題是:ClassA如何獲得ClassB的實例?一個最直接的方法是在aMethod里聲明:

    IClassB instanceOfClassB = new ClassB();

    這里使用了一個接口IClassB

    問題是,如果出現這樣的情況:繼續使用ClassA,但要求用IClassB的另一個實現ClassB2代替ClassB呢?更概括一點說:ClassA怎樣才能找到IClassB的具體實現?很明顯,上述代碼增加ClassAClassB的耦合度,以致于無法在不修改ClassA的情況下變更IClassB的具體實現。

    IoC模式就是用于解決這樣的問題。當然,還有其他的方法,比如Service Locator模式,但現在我們只關注IoC。如前所述,IoC容器負責初始化組件(如IClassB),并將實例交給使用者。使用代碼或配置文件以聲明的方式將接口與實例關聯起來,IoC容器負責進行實際的調用處理。對于調用者,只需要關注接口就行了。

    根據實例傳入方式的不同,IoC分為type 1 IoC(接口注入[3])、type 2 IoC(設值方法注入)和type 3 IoC(構造子注入)。分別用代碼說明如下:

    type 1 IoC(接口注入)

    public interface GetClassB {

      void getClassB(IClassB instanceOfClassB);

    }

     

    class ClassA implements GetClassB…

      IClassB instanceOfClassB;

      void getClassB(IClassB instanceOfClassB) {

    this.instanceOfClassB = instanceOfClassB;

      }

    type 2 IoC(設值方法注入)

    class ClassA...

      IClassB instanceOfClassB;

      public void setFinder(IClassB instanceOfClassB) {

        this.instanceOfClassB = instanceOfClassB;

      }

    type 3 IoC(構造子注入)

    class ClassA…

    ClassB instanceOfClassB;

      public classA(IClassB instanceOfClassB) {

        this. instanceOfClassB = instanceOfClassB;

      }

      Spring使用的是type 2 IoC


    [1] Martin FowlerInversion of Control Containers and the Dependency Injection pattern一文中,作者提出本模式更準確的名稱應該是Dependency Injection。考慮到使用上的習慣,在本文檔中我們將繼續使用IoC的概念。

    [2] 同一篇文章中,Martin Fowler還提出了Componet(組件)與Service(服務)的區別問題。我個人認為“組件”更有助于幫助我們理解IoC的概念,所以在本文檔中使用“組件”來代表“組件或服務”

    [3] 如上所述,注入是另一種說法,此處只用于輔助說明。


    posted on 2006-03-11 08:28 都市淘沙者 閱讀(2952) 評論(0)  編輯  收藏 所屬分類: Spring+Struts+Hibernate

    主站蜘蛛池模板: 久久久久久毛片免费播放| 中文字幕免费视频一| 亚洲最大的成人网| 亚洲最大黄色网站| 久久青青草原亚洲av无码app | 亚洲高清成人一区二区三区| 亚洲精品视频免费看| 久久久久免费精品国产小说| 日韩一级片免费观看| 亚洲另类无码专区丝袜| 亚洲国产精品专区| 久久精品国产亚洲AV嫖农村妇女| 国产精品亚洲w码日韩中文| 免费人成视频在线观看不卡| av无码东京热亚洲男人的天堂| 国产无遮挡色视频免费视频| 四虎免费在线观看| 国产免费拔擦拔擦8x| 国产乱弄免费视频| 亚洲精品麻豆av| 国产∨亚洲V天堂无码久久久 | 亚洲一本到无码av中文字幕| 亚洲国产精品无码久久九九大片| 亚洲成人激情小说| 日本高清不卡中文字幕免费| 国产免费黄色无码视频| 久久免费线看线看| 四虎影视免费在线| 亚洲91av视频| 亚洲av无码成人精品区一本二本| 免费一级毛片在线播放视频免费观看永久 | 欧洲亚洲国产精华液| 中文字幕在线观看免费| 免费A级毛片无码无遮挡内射| 亚洲成人国产精品| 亚洲Av高清一区二区三区| 羞羞漫画小舞被黄漫免费| 精品四虎免费观看国产高清午夜| 最近免费中文字幕4| 亚洲av无码乱码国产精品fc2| 边摸边吃奶边做爽免费视频网站|