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

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

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

    爪哇一角

    共同探討STRUTS#HIBERNATE#SPRING#EJB等技術(shù)
    posts - 3, comments - 6, trackbacks - 0, articles - 99
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Ioc容器的革命性?xún)?yōu)點(diǎn)(轉(zhuǎn))

    Posted on 2006-09-20 09:31 非洲小白臉 閱讀(217) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): spring

    Ioc容器的革命性?xún)?yōu)點(diǎn)

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

      這種變革,就如同我們無(wú)需考慮對(duì)象銷(xiāo)毀一樣;因?yàn)镴ava的垃圾回收機(jī)制幫助我們實(shí)現(xiàn)了對(duì)象銷(xiāo)毀;現(xiàn)在又無(wú)需考慮對(duì)象創(chuàng)建,對(duì)象的創(chuàng)建和銷(xiāo)毀都無(wú)需考慮了,這給編程帶來(lái)的影響是巨大的。

      我們從一個(gè)簡(jiǎn)單例子開(kāi)始,有一個(gè)普通類(lèi)B代碼如下:

    public class B implements BI{

        AInfterface a;

        public B(AInfterface a){

          this.a = a

        }

        public void invoke(){

          /** ...*/

        }

    }

    ?

      有兩種使用B的方式:

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

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

      上面兩種方式重要區(qū)別:
      前者需要照顧B類(lèi)中A類(lèi)的實(shí)例化,如果B類(lèi)中調(diào)用不只A類(lèi)一個(gè),還有更多其他類(lèi)如C/D/E等類(lèi),這樣,你在使用B類(lèi)時(shí),還需要研究其他類(lèi)的創(chuàng)建,如果C/D/E這些類(lèi)不是你自己編寫(xiě),你還需要翻閱它們的API說(shuō)明,研究它們應(yīng)該如何創(chuàng)建?是使用New 還是工廠(chǎng)模式 還是單態(tài)調(diào)用?

      這時(shí),你會(huì)感嘆:哇,有沒(méi)有搞錯(cuò)?我只不過(guò)是為了使用B類(lèi)中一個(gè)小小的方法,就花去我這么多時(shí)間和精力?

      當(dāng)我們使用第二種方式時(shí),就無(wú)需花很多精力和時(shí)間考慮A/C/D/E等類(lèi)的創(chuàng)建。

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

      當(dāng)然,在使用之前,我們需要做一個(gè)簡(jiǎn)單的配置,把你將來(lái)需要使用的類(lèi)全部告訴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類(lèi)代碼調(diào)用了A類(lèi)(甚至可能調(diào)用C等其他類(lèi)),但是在配置中我們無(wú)需考慮這種調(diào)用關(guān)系。因此,整個(gè)環(huán)節(jié)我們都無(wú)需考慮B類(lèi)中涉及其他類(lèi)的調(diào)用關(guān)系;這樣是非常省時(shí)省力的;特別是如果項(xiàng)目較大,JavaBeans特別多,又是多人協(xié)調(diào)開(kāi)發(fā),這種方式對(duì)提高開(kāi)發(fā)效率;降低出錯(cuò)率是非常大的幫助。

      如果你的項(xiàng)目中有非常多的類(lèi);調(diào)用關(guān)系很復(fù)雜,而且調(diào)用關(guān)系隨時(shí)都可能變化,那么,使用無(wú)需照顧調(diào)用關(guān)系的Ioc容器無(wú)疑是減輕開(kāi)發(fā)負(fù)擔(dān)的首選。

      ioc容器另外一個(gè)著名實(shí)現(xiàn)是Spring框架,但是在Spring的配置文件applicationContext.xml中,我們必須考慮上述調(diào)用關(guān)系:

    <bean id="b" class="test.B">
      <property name="a"><ref bean="a"/></property><!-- 必須指定調(diào)用關(guān)系 -->
      ....
    </bean>
    <bean id="a" class="test.A">
    <bean id="c" class="test.C">

      所以,從以上對(duì)比來(lái)看,從項(xiàng)目開(kāi)發(fā)效率角度看,基于PiocContainer實(shí)現(xiàn)的Jdon框架在實(shí)際使用配置效率無(wú)疑要高于Spring框架。

      同時(shí),也可以說(shuō):基于PiocContainer實(shí)現(xiàn)的Jdon框架完全真正實(shí)現(xiàn)了Ioc容器的革命性?xún)?yōu)點(diǎn):顛覆了“使用對(duì)象之前必須創(chuàng)建” 的基本Java語(yǔ)言定律


    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产成人精品无码区花野真一| 免费国产va视频永久在线观看| 免费毛片网站在线观看| 国产午夜亚洲精品不卡| 亚洲色大成网站WWW久久九九| 99re在线这里只有精品免费| 亚洲国产欧美日韩精品一区二区三区| 在线精品亚洲一区二区三区| 中文字幕免费视频| 免费看一级高潮毛片| 亚洲成色在线综合网站| 日本免费v片一二三区| 你好老叔电影观看免费| 亚洲成人激情小说| 亚洲AV人人澡人人爽人人夜夜| 全免费a级毛片免费看无码| 免费毛片在线看不用播放器| 亚洲AV综合永久无码精品天堂| 亚洲AV无码成人专区片在线观看| 日本免费一区尤物| 日韩在线播放全免费| 9久久免费国产精品特黄| 亚洲一区二区观看播放| 亚洲AV日韩AV永久无码免下载| 国产成人高清精品免费软件| 真人做人试看60分钟免费视频| 两个人日本WWW免费版| 亚洲精品无码久久久久YW| 亚洲视频2020| 中文字幕人成人乱码亚洲电影 | 99麻豆久久久国产精品免费| 亚洲精品无码成人片久久不卡| 亚洲影院在线观看| 亚洲午夜福利717| 亚洲狠狠爱综合影院婷婷| 全免费a级毛片免费看不卡| 日韩在线免费视频| 国产电影午夜成年免费视频| 免费无码又爽又刺激网站| 一区二区三区免费电影| 亚洲变态另类一区二区三区|