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

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

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

    隨筆-28  評(píng)論-15  文章-81  trackbacks-0

     

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

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

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

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

    分散關(guān)注

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

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

    AOP是什么?

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

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

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

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

    abstract class Worker{

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

    }


      缺點(diǎn):

    • accessDataObject()方法需要有狀態(tài)之類(lèi)的相關(guān)代碼。
    • Java只提供了單繼承,因此具體訪(fǎng)問(wèn)類(lèi)只能繼承這個(gè)父類(lèi),如果具體訪(fǎng)問(wèn)類(lèi)還要繼承其它父類(lèi),比如另外一個(gè)如Worker的父類(lèi),將無(wú)法方便實(shí)現(xiàn)。
    • 重用被打折扣,具體訪(fǎng)問(wèn)類(lèi)因?yàn)橐舶?/span>狀態(tài)之類(lèi)的相關(guān)代碼,只能被重用在相關(guān)有的場(chǎng)合,重用范圍很窄。

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

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

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

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

    AOP應(yīng)用范圍

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

    AOP有必要嗎?

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

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

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


    AOP具體實(shí)現(xiàn)

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

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

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

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

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

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

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

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

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 18禁黄网站禁片免费观看不卡| 精品久久久久久亚洲综合网| 中文字幕免费不卡二区| 久久久久亚洲AV成人网| 日本一区二区三区免费高清在线| 国产成人精品免费视频大全五级| 亚洲一卡一卡二新区无人区| 毛片免费在线播放| 亚洲AV无码AV日韩AV网站| 免费无码黄动漫在线观看| 欧美日韩亚洲精品| 亚洲日本中文字幕天堂网| 国产精品午夜免费观看网站 | 美女巨胸喷奶水视频www免费| 久久精品国产亚洲精品| 女人体1963午夜免费视频| 久久久久久亚洲精品中文字幕| 99久久人妻精品免费二区| 亚洲一级视频在线观看| 成人免费视频国产| 老司机午夜性生免费福利 | 亚洲?V无码成人精品区日韩| 一级一片免费视频播放| 亚洲成AV人片在线观看WWW| 最近中文字幕免费2019| 亚洲国产精品一区二区三区在线观看| 免费涩涩在线视频网| 成人免费夜片在线观看| 亚洲图片一区二区| 毛片免费vip会员在线看| 欧洲精品码一区二区三区免费看| 国产亚洲精品国产| 曰批全过程免费视频在线观看| 猫咪免费观看人成网站在线| 久久久久亚洲AV成人无码| 精品久久久久国产免费| h视频在线免费观看| 亚洲av永久无码嘿嘿嘿| 亚洲男女内射在线播放| 2021在线永久免费视频| 日本黄页网址在线看免费不卡|