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

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

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

    posts - 176, comments - 240, trackbacks - 0, articles - 7

    AOP的應(yīng)用

    Posted on 2009-12-13 11:34 canonical 閱讀(1525) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Witrix開(kāi)發(fā)平臺(tái)

         AOP(Aspect Oriented Programming)早已不是什么新鮮的概念,但有趣的是,除了事務(wù)(transaction), 日志(Log)等寥寥幾個(gè)樣板應(yīng)用之外,我們似乎找不到它的用武之地。http://canonical.javaeye.com/blog/34941 很多人的疑惑是我直接改代碼就行了,干嗎要用AOP呢?AOP的定義和實(shí)現(xiàn)那么復(fù)雜,能夠提供什么特異的價(jià)值呢?
        Witrix平臺(tái)依賴(lài)于AOP概念來(lái)完成領(lǐng)域模型抽象與模型變換,但是在具體的實(shí)現(xiàn)方式上,卻與常見(jiàn)的AOP軟件包有著很大差異。http://canonical.javaeye.com/blog/542622 AOP的具體技術(shù)內(nèi)容包括定位和組裝兩個(gè)部分。簡(jiǎn)化切點(diǎn)定位方式和重新規(guī)劃組裝空間,是Witrix中有效使用AOP技術(shù)的前提。
        在Witrix平臺(tái)中,對(duì)于AOP技術(shù)的一種具體應(yīng)用是支持產(chǎn)品的二次開(kāi)發(fā)。在產(chǎn)品的實(shí)施過(guò)程中,經(jīng)常需要根據(jù)客戶的特定需求,修改某些函數(shù)的實(shí)現(xiàn)。我們 可以選擇在主版本代碼中不斷追加相互糾纏的if-else語(yǔ)句,試圖去包容所有已知和未知的應(yīng)用場(chǎng)景。我們也可以選擇主版本代碼和定制代碼獨(dú)立開(kāi)發(fā)的方 式,主版本代碼實(shí)現(xiàn)邏輯框架,定制代碼通過(guò)AOP機(jī)制與主版本代碼融合,根據(jù)具體場(chǎng)景要求對(duì)主版本功能進(jìn)行修正。AOP的這種應(yīng)用與所謂的橫切概念是有所 區(qū)別的。典型的,一個(gè)橫切的切點(diǎn)會(huì)涉及到很多類(lèi)的很多方法,而函數(shù)定制則往往要求準(zhǔn)確定位到某個(gè)業(yè)務(wù)對(duì)象的某個(gè)特定的業(yè)務(wù)方法上。傳統(tǒng)AOP技術(shù)的切點(diǎn)定 義方式并不適合這種精確的單點(diǎn)定位。在Witrix平臺(tái)中,我們通過(guò)直接的名稱(chēng)映射來(lái)定義切點(diǎn)。例如,修正spring中注冊(cè)的MyObject對(duì)象的 myFunc方法,可以在app.aop.xml文件中增加如下標(biāo)簽

    <myObject.myFunc>
          在原函數(shù)執(zhí)行之前執(zhí)行
          
    <aop:Proceed/> <!-- 執(zhí)行原函數(shù)內(nèi)容 -->
          在原函數(shù)執(zhí)行之后執(zhí)行
    </myObject.myFunc>


    [spring對(duì)象名.方法名]這種映射方法比基于正則字符串匹配的方式要簡(jiǎn)單明確的多。spring容器本身已經(jīng)實(shí)現(xiàn)了對(duì)象的全局管理功能,spring對(duì)象名稱(chēng)必然是唯一的,公開(kāi)發(fā)布的,相互之間不沖突的,沒(méi)有必要再通過(guò)匹配運(yùn)算重新發(fā)現(xiàn)出它的唯一性。
       對(duì)于一些確實(shí)存在的橫切需求,我們可以通過(guò)Annotation機(jī)制來(lái)實(shí)現(xiàn)切點(diǎn)坐標(biāo)標(biāo)定,將復(fù)雜的切點(diǎn)匹配問(wèn)題重新劃歸為[對(duì)象名.方法名]。

    @AopClass({"myObject","otherObject"})
      class SomeClass{
         @AopMethod({"myFunc","otherFunc"})
         void someFunc(){}
      }

     

    針對(duì)以上對(duì)象,在app.aop.xml文件中可以定義

    <I-myObject.I-myFunc>
       .
    </I-myObject.I-myFunc>

    主站蜘蛛池模板: 国产乱妇高清无乱码免费| 亚洲欧洲日本精品| 亚洲日韩国产精品乱| 四虎影视免费永久在线观看| 最近中文字幕无免费视频| 成人免费午夜在线观看| 中国在线观看免费国语版| 日本亚洲免费无线码| 国产一精品一AV一免费孕妇| 成人影片麻豆国产影片免费观看 | 国产成人亚洲毛片| 老司机午夜在线视频免费观| 免费看一级一级人妻片| 亚洲免费无码在线| 精品视频一区二区三区免费| 99久久久国产精品免费牛牛| 日韩在线播放全免费| 免费无码AV片在线观看软件| 免费无码一区二区三区蜜桃大| 日本免费v片一二三区| 亚洲A∨午夜成人片精品网站| 亚洲国产一成久久精品国产成人综合| 精品国产亚洲男女在线线电影| 亚洲人成亚洲人成在线观看| 亚洲AV日韩精品久久久久久久| 亚洲网站在线免费观看| 亚洲最大的成人网| 手机永久免费的AV在线电影网| 国产亚洲精品免费视频播放 | 亚洲高清毛片一区二区| 日本激情猛烈在线看免费观看| 国产综合免费精品久久久| 日韩午夜理论免费TV影院| 亚洲人成网站免费播放| va亚洲va日韩不卡在线观看| 日本亚洲欧洲免费天堂午夜看片女人员 | 在线精品免费视频| 亚洲无线一二三四区手机| 亚洲Aⅴ无码专区在线观看q| 亚洲精品一二三区| 久久不见久久见免费影院www日本|