爪哇一角

          共同探討STRUTS#HIBERNATE#SPRING#EJB等技術
          posts - 3, comments - 6, trackbacks - 0, articles - 99
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Ioc容器的革命性優點(轉)

          Posted on 2006-09-20 09:31 非洲小白臉 閱讀(219) 評論(0)  編輯  收藏 所屬分類: spring

          Ioc容器的革命性優點

            我們知道,在Java基本教程中有一個定律告訴我們:所有的對象都必須創建;或者說:使用對象之前必須創建,但是現在我們可以不必一定遵循這個定律了,我們可以從Ioc容器中直接獲得一個對象然后直接使用,無需事先創建它們。

            這種變革,就如同我們無需考慮對象銷毀一樣;因為Java的垃圾回收機制幫助我們實現了對象銷毀;現在又無需考慮對象創建,對象的創建和銷毀都無需考慮了,這給編程帶來的影響是巨大的。

            我們從一個簡單例子開始,有一個普通類B代碼如下:

          public class B implements BI{

              AInfterface a;

              public B(AInfterface a){

                this.a = a

              }

              public void invoke(){

                /** ...*/

              }

          }

          ?

            有兩種使用B的方式:

            普通無Ioc容器的調用方式:
            BI b = new B(new A());//需要在生成B實例之前 生成A等實例
            b. invoke();

            使用Ioc容器(Jdon框架)的革命調用方式:
            BI b = (BI) WebAppUtil.getService(“b”);
            b. invoke();

            上面兩種方式重要區別:
            前者需要照顧B類中A類的實例化,如果B類中調用不只A類一個,還有更多其他類如C/D/E等類,這樣,你在使用B類時,還需要研究其他類的創建,如果C/D/E這些類不是你自己編寫,你還需要翻閱它們的API說明,研究它們應該如何創建?是使用New 還是工廠模式 還是單態調用?

            這時,你會感嘆:哇,有沒有搞錯?我只不過是為了使用B類中一個小小的方法,就花去我這么多時間和精力?

            當我們使用第二種方式時,就無需花很多精力和時間考慮A/C/D/E等類的創建。

            使用Ioc容器,你再也不必做這些僵化愚蠢的工作了,我們只需從ioc容器中抓取一個類然后直接使用它們。

            當然,在使用之前,我們需要做一個簡單的配置,把你將來需要使用的類全部告訴ioc容器,例如Jdon框架的ioc容器配置jdonframework.xml如下:

          <app>
            <services>
              <pojoService name="b" class="test.B"/>
              <pojoService name="a" class="test.A"/>
              <pojoService name="c" class="test.C"/>

            </services>
          </app>

            注意:雖然B類代碼調用了A類(甚至可能調用C等其他類),但是在配置中我們無需考慮這種調用關系。因此,整個環節我們都無需考慮B類中涉及其他類的調用關系;這樣是非常省時省力的;特別是如果項目較大,JavaBeans特別多,又是多人協調開發,這種方式對提高開發效率;降低出錯率是非常大的幫助。

            如果你的項目中有非常多的類;調用關系很復雜,而且調用關系隨時都可能變化,那么,使用無需照顧調用關系的Ioc容器無疑是減輕開發負擔的首選。

            ioc容器另外一個著名實現是Spring框架,但是在Spring的配置文件applicationContext.xml中,我們必須考慮上述調用關系:

          <bean id="b" class="test.B">
            <property name="a"><ref bean="a"/></property><!-- 必須指定調用關系 -->
            ....
          </bean>
          <bean id="a" class="test.A">
          <bean id="c" class="test.C">

            所以,從以上對比來看,從項目開發效率角度看,基于PiocContainer實現的Jdon框架在實際使用配置效率無疑要高于Spring框架。

            同時,也可以說:基于PiocContainer實現的Jdon框架完全真正實現了Ioc容器的革命性優點:顛覆了“使用對象之前必須創建” 的基本Java語言定律


          只有注冊用戶登錄后才能發表評論。


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 武宁县| 厦门市| 巴彦淖尔市| 石屏县| 商洛市| 神农架林区| 金堂县| 商南县| 颍上县| 阳泉市| 安阳市| 贺州市| 神木县| 宜丰县| 仲巴县| 象山县| 道孚县| 玉门市| 青田县| 沛县| 南乐县| 万山特区| 广河县| 泾川县| 慈利县| 横山县| 陆河县| 黄浦区| 黔东| 青铜峡市| 西林县| 行唐县| 会宁县| 彭州市| 房产| 蓬莱市| 怀安县| 金乡县| 阳东县| 彭州市| 璧山县|