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

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

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

    隨筆 - 6  文章 - 129  trackbacks - 0
    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(14)

    隨筆檔案(6)

    文章分類(467)

    文章檔案(423)

    相冊

    收藏夾(18)

    JAVA

    搜索

    •  

    積分與排名

    • 積分 - 828831
    • 排名 - 49

    最新評論

    閱讀排行榜

    評論排行榜

    理解IoC的概念

      IoC全稱Inversion of Control,直譯為控制反轉.何謂IoC?在解釋此概念之前,我們來看看下面的例子
    import ...

    public class BookService {
      private BookDAO bookDAO = new DbBookDAO();
      
      public List<Book> listBooks(String author) {
        List<Book> books = bookDAO.listAll();
        return books ;
      }
    }

    可以看到,listBooks方法的功能非常簡單,即列出所有書籍.而列出所有書籍的功能被委托給bookDAO對象.
    考慮到書籍可能存在多種形式,如數據庫,XML文件等,將BookDAO申明為接口,因此我們實現了一個具體
    子類DbBookDAO.
      現在需要考慮的是,BookService如何持有bookDAO對象.最簡單的辦法是,在BookService的內部持有
    一個DbBookDAO的實例,上面的例子確實是這么做的.考慮一下會發現以下的問題:
    (1)在BookService中硬編碼創建了BookDAO,如果需要另一種BookDAO的實現,則需要修改BookService的
     代碼,換句話就是BookService組件不能脫離BookDAO的具體實現.
    (2)BookDAO的實例無法被其它組件共享.假設其它的組件也需要引用BookDAO,則多個組件很難共享一個
     BookDAO實例,因為該實例的生命周期定義在了BookService組件中了,從而難以共享.
    (3)如果BookDAO仍需要引用其它資源,例如DataSource,則BookService可能還需要負責管理和維護一個
     DataSource,而這實例不是作為上層組件BookService的職責.
    (4)測試BookService是復雜的,因為首先編寫DbBookDAO,倘若DbBookDAO還依賴于DataSource,是相當復雜.
      從以上幾點可以看出,如果系統中有大量的組件,其它生命周期和相互之間的依賴關系,如果由組件
    自己維護,不但加大的系統的復雜度,而且會導致組件之間的極為緊密的耦合,繼而給測試和維護帶來了
    極大的困難.
      在IoC模式下,控制權發生了反轉:從應用程序轉移到了IoC容器.組件不再由應用程序負責創建和配置
    而是由容器負責,應用程序只需直接使用已經創建并配置好的組件.

    import ...

    public class BookService {
      private BookDAO bookDAO ;
      public void setBookDAO(BookDAO bookDAO) {
       this.bookDAO = bookDAO ;
      }
      
      public List<Book> listBooks(String author) {
        List<Book> books = bookDAO.listAll();
        return books ;
      }
    }
    修改后的bookDAO實例不再由BookService創建,而是由IoC容器負責將某個BookDAO實例通過setBookDAO()
    注入.這樣做的好處:
    (1)BookService不必關心如何創建BookDAO的實例,也不必關心BookDAO的具體實現,只需要使用它就可以了
     因此簡化了BookService的編碼.
    (2)BookDAO的實例由IoC容器管理,因此,可以在多個組件之間共享,只要它們也實現了相應的setBookDAO()
     方法就可以了.
    (3)測試BookService也變成十分容易了.

    IoC容器負責實例化所有的組件,因此需要告訴容器如何創建組件和各組件之間的依賴關系.



    posted on 2007-10-21 12:59 Ke 閱讀(617) 評論(1)  編輯  收藏 所屬分類: spring

    FeedBack:
    # re: spring2.0學習筆記二(理解IoC的概念) 2008-09-07 22:59 WangSir
    對概念的闡述得很優秀,一看就明白,Thanks!  回復  更多評論
      
    主站蜘蛛池模板: 国产在线98福利播放视频免费| 久久w5ww成w人免费| 一级黄色毛片免费看| 可以免费观看的一级毛片| 亚洲天然素人无码专区| 日韩精品无码免费视频| 国产成人aaa在线视频免费观看| 亚洲www在线观看| 特级做A爰片毛片免费69| 国产成人亚洲精品| 天天干在线免费视频| 国产精品亚洲综合一区在线观看| 精品国产一区二区三区免费| 24小时日本在线www免费的| 亚洲日本人成中文字幕| 毛片免费在线播放| 在线观看免费亚洲| 国产成人亚洲精品影院| 国产精品高清视亚洲一区二区| 成人嫩草影院免费观看| 亚洲精品乱码久久久久66| 亚洲日韩国产一区二区三区在线| 女人隐私秘视频黄www免费| 亚洲日韩精品A∨片无码| 国产亚洲精品免费| 夜夜春亚洲嫩草影院| 猫咪免费人成网站在线观看入口 | 蜜桃传媒一区二区亚洲AV| 成人永久免费福利视频网站| 一区二区三区视频免费| 亚洲大尺度无码专区尤物| 国产精品成人观看视频免费| 亚洲另类无码一区二区三区| 国产在线观看免费不卡| a视频免费在线观看| 亚洲一级毛片免观看| 亚洲欧洲久久av| 午夜亚洲乱码伦小说区69堂| 亚洲午夜久久久影院| 100000免费啪啪18免进| 四虎影视久久久免费|