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

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

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

    隨筆-28  評論-15  文章-81  trackbacks-0

     

    為什么要區(qū)分J2EE容器和J2EE應(yīng)用系統(tǒng)?

      我們知道,J2EE應(yīng)用系統(tǒng)只有部署在J2EE容器中才能運行,那么為什么劃分為J2EE容器和J2EE應(yīng)用系統(tǒng)?通過對J2EE容器運行機制的分析(見我的電子教材“EJB實用原理),我們可以發(fā)現(xiàn):實際上J2EE容器分離了一般應(yīng)用系統(tǒng)的一些通用功能,例如事務(wù)機制、安全機制以及對象池或線程池等性能優(yōu)化機制。

      這些功能機制是每個應(yīng)用系統(tǒng)幾乎都需要的,因此可以從具體應(yīng)用系統(tǒng)中分離出來,形成一個通用的框架平臺,而且,這些功能機制的設(shè)計開發(fā)有一定難度,同時運行的穩(wěn)定性和快速性都非常重要,必須經(jīng)過長時間調(diào)試和運行經(jīng)驗積累而成,因此,形成了專門的J2EE容器服務(wù)器產(chǎn)品,如Tomcat JBossWebsphereWebLogic等。

      從J2EE系統(tǒng)劃分為J2EE容器和J2EE應(yīng)用系統(tǒng)兩個方面,我們已經(jīng)看到一種分散關(guān)注的思路(separation of concerns)。

    分散關(guān)注

      將通用需求功能從不相關(guān)類之中分離出來;同時,能夠使得很多類共享一個行為,一旦行為發(fā)生變化,不必修改很多類,只要修改這個行為就可以。

       AOP就是這種實現(xiàn)分散關(guān)注的編程方法,它將關(guān)注封裝在方面中。

    AOP是什么?

      AOPOOP的延續(xù),是Aspect Oriented Programming的縮寫,意思是面向方面編程。AOP實際是GoF設(shè)計模式的延續(xù),設(shè)計模式孜孜不倦追求的是調(diào)用者和被調(diào)用者之間的解耦,AOP可以說也是這種目標的一種實現(xiàn)。

      舉例:假設(shè)有在一個應(yīng)用系統(tǒng)中,有一個共享的數(shù)據(jù)必須被并發(fā)同時訪問,首先,將這個數(shù)據(jù)封裝在數(shù)據(jù)對象中,稱為Data Class,同時,將有多個訪問類,專門用于在同一時刻訪問這同一個數(shù)據(jù)對象。

      為了完成上述并發(fā)訪問同一資源的功能,需要引入鎖Lock的概念,也就是說,某個時刻,當(dāng)有一個訪問類訪問這個數(shù)據(jù)對象時,這個數(shù)據(jù)對象必須上鎖Locked,用完后就立即解鎖unLocked,再供其它訪問類訪問。

      使用傳統(tǒng)的編程習(xí)慣,我們會創(chuàng)建一個抽象類,所有的訪問類繼承這個抽象父類,如下:

    abstract class Worker{

      abstract void locked();
      abstract void accessDataObject();
      abstract void unlocked();

    }


      缺點:

    • accessDataObject()方法需要有狀態(tài)之類的相關(guān)代碼。
    • Java只提供了單繼承,因此具體訪問類只能繼承這個父類,如果具體訪問類還要繼承其它父類,比如另外一個如Worker的父類,將無法方便實現(xiàn)。
    • 重用被打折扣,具體訪問類因為也包含狀態(tài)之類的相關(guān)代碼,只能被重用在相關(guān)有的場合,重用范圍很窄。

      仔細研究這個應(yīng)用的,它其實有下列特性:
    • 功能不是具體訪問類的首要或主要功能,訪問類主要功能是訪問數(shù)據(jù)對象,例如讀取數(shù)據(jù)或更改動作。
    • 行為其實是和具體訪問類的主要功能可以獨立、區(qū)分開來的。
    • 功能其實是這個系統(tǒng)的一個縱向切面,涉及許多類、許多類的方法。如下圖:

      因此,一個新的程序結(jié)構(gòu)應(yīng)該是關(guān)注系統(tǒng)的縱向切面,例如這個應(yīng)用的功能,這個新的程序結(jié)構(gòu)就是aspect(方面)

      在這個應(yīng)用中,方面(aspect)應(yīng)該有以下職責(zé):

      提供一些必備的功能,對被訪問對象實現(xiàn)加鎖或解鎖功能。以保證所有在修改數(shù)據(jù)對象的操作之前能夠調(diào)用lock()加鎖,在它使用完成后,調(diào)用unlock()解鎖。

    AOP應(yīng)用范圍

      很明顯,AOP非常適合開發(fā)J2EE容器服務(wù)器,目前JBoss 4.0正是使用AOP框架進行開發(fā)。
      具體功能如下:
    Authentication
    權(quán)限
    Caching
    緩存
    Context passing
    內(nèi)容傳遞
    Error handling
    錯誤處理
    Lazy loading
     懶加載
    Debugging
      調(diào)試
    logging, tracing, profiling and monitoring
     記錄跟蹤 優(yōu)化 校準
    Performance optimization
     性能優(yōu)化
    Persistence
      持久化
    Resource pooling
     資源池
    Synchronization
     同步
    Transactions
    事務(wù)

    AOP有必要嗎?

      當(dāng)然,上述應(yīng)用范例在沒有使用AOP情況下,也得到了解決,例如JBoss 3.XXX也提供了上述應(yīng)用功能,但是沒有使用AOP

      但是,使用AOP可以讓我們從一個更高的抽象概念來理解軟件系統(tǒng),AOP也許提供一種有價值的工具。可以這么說:因為使用AOP結(jié)構(gòu),現(xiàn)在JBoss 4.0的源碼要比JBoss 3.X容易理解多了,這對于一個大型復(fù)雜系統(tǒng)來說是非常重要的。

      從另外一個方面說,好像不是所有的人都需要關(guān)心AOP,它可能是一種架構(gòu)設(shè)計的選擇,如果選擇J2EE系統(tǒng),AOP關(guān)注的上述通用方面都已經(jīng)被J2EE容器實現(xiàn)了,J2EE應(yīng)用系統(tǒng)開發(fā)者可能需要更多地關(guān)注行業(yè)應(yīng)用方面aspect


    AOP具體實現(xiàn)

      AOP是一個概念,并沒有設(shè)定具體語言的實現(xiàn),它能克服那些只有單繼承特性語言的缺點(如Java),目前AOP具體實現(xiàn)有以下幾個項目:

      AspectJ (TM): 創(chuàng)建于Xerox PARC. 有近十年歷史,成熟
      缺點:過于復(fù)雜;破壞封裝;需要專門的Java編譯器。

      動態(tài)AOP:使用JDK的動態(tài)代理API或字節(jié)碼Bytecode處理技術(shù)。

      基于動態(tài)代理API的具體項目有:
      JBoss 4.0 JBoss 4.0
    服務(wù)器
      nanning
     這是以中國南寧命名的一個項目,搞不清楚為什么和中國相關(guān)?是中國人發(fā)起的?

      基于字節(jié)碼的項目有:
      aspectwerkz
     
      spring ?

    在以后其它文章中,我將繼續(xù)對AOP概念進行分析,和大家一起學(xué)習(xí)進步。

    參考資料:
    http://www.voelter.de/data/articles/aop/aop.html
    Aspect-Oriented_Java_Development.pdf

    posted on 2007-10-23 22:55 譚明 閱讀(244) 評論(0)  編輯  收藏 所屬分類: J2EE

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久精品国产亚洲麻豆| 亚洲阿v天堂在线2017免费| 亚洲综合视频在线| 两个人看的www免费| 亚洲情综合五月天| 日韩电影免费在线观看网站| 亚洲一区爱区精品无码| 成全高清在线观看免费| 久久久无码精品亚洲日韩蜜桃| 无码中文字幕av免费放dvd| 亚洲视频在线观看一区| 亚洲一级免费毛片| 亚洲AV色吊丝无码| 国产视频精品免费| 人人公开免费超级碰碰碰视频 | 国产99久久久国产精免费| 亚洲片一区二区三区| 91成人免费福利网站在线| 亚洲精品亚洲人成在线观看| 精品无码人妻一区二区免费蜜桃 | 久久综合亚洲色HEZYO社区| 免费看美女裸露无档网站| 日韩亚洲产在线观看| 亚洲不卡无码av中文字幕| 中国一级全黄的免费观看| 久久亚洲私人国产精品vA | 亚洲三级高清免费| 99亚洲精品卡2卡三卡4卡2卡| 亚洲片一区二区三区| 久久久久av无码免费网| 欧美亚洲精品一区二区| 国产AV无码专区亚洲AV男同| 国产成人精品免费视频大全麻豆| 色偷偷亚洲男人天堂| 亚洲国产成人一区二区三区| 无限动漫网在线观看免费| 人妻无码中文字幕免费视频蜜桃| 久久青青成人亚洲精品| 在线A级毛片无码免费真人| GOGOGO免费观看国语| 中文字幕亚洲综合久久综合 |