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

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

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

    隨筆-42  評論-349  文章-4  trackbacks-0
    ?

    我的書中的一段,貼出來。呵呵。大伙兒拍磚哦!by:張勇


    ? IoC即Inversion of Control,控制反轉。它不是一種編程技術,而是一種設計模式。利用它,可以促進應用程序組件或類之間的松散耦合。一般的情況下,我們需要自己創建對象的實例,比如在Computer類中創建一個打印機的實例:

    1Printer?printer?=?new?DellPrinter();//創建一個戴爾打印機的實例

    如果使用IoC,我們則不必再自己創建類的實例,而是將創建對象的任務交給IoC容器去做。這樣,我們在使用某個對象的時候,就可以直接從容器中獲取一個實例。就像一個好萊塢的原則一樣“Don't call me.I'll call you!”,容器會在合適的時候創建它。我們就像不必考慮對象的銷毀一樣,也可以不必考慮對象的創建,這就是控制反轉。
    ??? 這樣做有什么好處呢?在上面的例子中,我們創建為我們的電腦安裝了一個戴爾打印機(創建一個戴爾打印機類的實例)。可是如果有一天,我們系統要升級了,需要使用惠普的打印機。這時,由于我們把打印機已經“固化”到電腦中了(打印機和電腦的耦合很高),要更換打印機,就不得不先拆開電腦,從主板中卸下打印機,再安裝新的打印機(修改Computer類的源代碼,然后重新編譯,重新部署)。可以看到,這是一個計算機專家才能完成的任務,對于一個對計算機不是很了解的人來說,這將會是一場噩夢。那么如何解決這個問題呢?辦法之一就是我們把打印機抽象成一個接口:

    ?

    1 public ? interface ?Printer? {
    2 ???? public ?? void ?print();
    3 }

    這樣各個廠商在生產打印機的時候,就只是需要實現這個接口所定義的功能就行了。就像我們在電腦上做一個專門的打印機模塊,需要的時候卸掉原來的模塊,再安裝上新型號就的打印機可以了,前提是新的模塊必須和以前的有一樣的功能和調用接口。在電腦中變成了這樣:

    ?

    ?

    1 Printer?printer?; // 提供一個打印機的接口
    2 // 提供一個安裝打印機的方法
    3 public ? void ?setPrinter(Printer?printer)? {
    4 ???????? this .printer? = ?printer;
    5 ????}

    6

    ?這樣看似很好的解決了上述問題。但是實際上電腦(Computer)和打印機(Printer)之間的耦合性仍然很高:打印機的代碼寫入了電腦中,我們不得不在使用之前先調SetPrinter方法為電腦“安裝”打印機,但是電腦使用者僅僅想使用打印機而已,可是這里他卻不得不做安裝打印機的工作。

    這種依賴關系在“分離關注”的思想下是無法忍耐的,于是產生了新的模式,即控制反轉( IoC )。使用這種方式,電腦 (Computer) 只是需要提供一個打印機 (Printer) 的“屬性”和安裝打印機的“渠道”。如果需要(當需要使用打印任務時), IoC 容器會在合適的時候自動為電腦注入(安裝)打印機。這就好像我們請了個網管,我們要使用打印機的時候,可以直接告訴網管“我需要一個惠普打印機 ”,然后網管就自動的找到打印機并安裝好,我們就可以使用它了。這樣電腦使用者就可以完全不必關心打印機而只需使用它就行了。代碼如下:

    ?1 public ? class ?Computer? {
    ?2 ???? private ?Printer?printer;
    ?3 ???? public ?Print() {
    ?4 ????????printer.print();
    ?5 ????}

    ?6 ???? public ?Printer?getPrinter()? {
    ?7 ???????? return ?printer;
    ?8 ????}

    ?9 ???? public ? void ?setPrinter(Printer?printer)? {
    10 ???????? this .printer? = ?printer;
    11 ????}

    12 }

    ??

    1 ???? < bean? id ="Computer" ?class ="com.Computer" >
    2 ?????? < property? name ="printer" ?ref ="Printer" />
    3 ???? </ bean >
    4


    ???Spring?框架為我們提供了一個優秀的IoC容器。我們只是需要在它的配置文件中指明我們需要那個類的實例,這個類在那里,Spring的IoC容器會在合適的時候自動的為我們注入這個類的實例。從而我們可以完全不必考慮對象的創建工作,還可以實現應用程序各個組件的“即插即用”,而不需要修改源代碼。

    ?? Spring提供呢多種配置文件的形式,但是推薦使用xml配置文件來驅動應用,盡管它也支持.properties文件和數據庫的配置形式。



    By:殘夢追月
    posted on 2008-07-15 15:07 殘夢追月 閱讀(3732) 評論(11)  編輯  收藏 所屬分類: Spring

    評論:
    # re: 關于IoC的介紹 2008-07-16 09:59 | 殘夢追月
    大俠不要客氣,拍磚啊。  回復  更多評論
      
    # re: 關于IoC的介紹 2008-07-17 21:26 | 殘夢追月
    今天突然發現好大一個錯誤!汗!瀑布汗!我狂汗!馬上改正!達人莫怪啊。  回復  更多評論
      
    # re: 關于IoC的介紹 [未登錄] 2008-07-29 04:40 | zhang
    < bean id ="Computer" class ="com.Computer" >
    為什么不是class ="Computer" ,id ="Computer01" ?  回復  更多評論
      
    # re: 關于IoC的介紹 2008-07-29 14:10 | 殘夢追月
    @zhang
    因為在我的工程中Computer類在com包中啊,這里必須要它的全類路徑。  回復  更多評論
      
    # re: 關于IoC的介紹 [未登錄] 2008-08-03 21:27 | moonandsun
    不錯,繼續努力。  回復  更多評論
      
    # re: 關于IoC的介紹 2008-08-03 21:56 | 殘夢追月
    @moonandsun
    thanks。  回復  更多評論
      
    # re: 關于IoC的介紹 2008-08-26 09:41 | ctl
    例子很好,我終于明白了  回復  更多評論
      
    # re: 關于IoC的介紹 2008-11-03 13:59 | volvo
    謝謝,太棒了!!!  回復  更多評論
      
    # re: 關于IoC的介紹 2010-11-25 12:30 | 劉振威
    這個感覺像是struts2中的params截攔器自動從表單轉移數據到bean屬性中?
    是不是這樣..我沒學過spring.呵呵  回復  更多評論
      
    # re: 關于IoC的介紹 2011-01-02 22:48 | 過客·
    恩 懂了IOC 不過其實你關鍵是要寫的是XML的介紹 這個才是核心 不過寫的還是很清楚了 學習啊 有空加我QQ 教教我咯 ·····  回復  更多評論
      
    # re: 關于IoC的介紹 [未登錄] 2013-02-18 09:38 | 111
    @過客&#183;
    不錯,支持下  回復  更多評論
      
    主站蜘蛛池模板: 9久9久女女免费精品视频在线观看| 热99re久久免费视精品频软件| 国产99精品一区二区三区免费| 思思re热免费精品视频66 | 97在线观看永久免费视频| 国产高清免费观看| 亚洲国产另类久久久精品黑人| 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 日本红怡院亚洲红怡院最新| 十八禁视频在线观看免费无码无遮挡骂过 | 国产精品亚洲专区无码不卡| 日韩免费人妻AV无码专区蜜桃 | 亚洲一级特黄特黄的大片| 五月天国产成人AV免费观看| 国产又黄又爽又猛免费app| 久久精品国产亚洲av麻豆图片| 亚洲黄片手机免费观看| 国产亚洲综合色就色| 一区二区三区在线免费看| 亚洲不卡无码av中文字幕| 又大又硬又爽又粗又快的视频免费| 亚洲国产精品第一区二区| 久久WWW免费人成一看片| 国产成人亚洲综合无码| 在线看片免费人成视频久网下载| 国产yw855.c免费视频| 免费福利资源站在线视频| 曰皮全部过程视频免费国产30分钟| 亚洲一区二区三区首页| 日韩吃奶摸下AA片免费观看| 亚洲AV成人片无码网站| 亚洲国产精品VA在线观看麻豆| 亚洲黄色免费网址| 羞羞网站免费观看| 亚洲国产成人精品无码区二本| 亚洲精品无码久久久久APP | www在线观看播放免费视频日本| 黄色免费在线网站| 日韩亚洲国产二区| 亚洲国产精品无码久久久| 中文字字幕在线高清免费电影|