如鵬網(wǎng) 大學(xué)生計(jì)算機(jī)學(xué)習(xí)社區(qū)

          CowNew開(kāi)源團(tuán)隊(duì)

          http://www.cownew.com 郵件請(qǐng)聯(lián)系 about521 at 163.com

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            363 隨筆 :: 2 文章 :: 808 評(píng)論 :: 0 Trackbacks

          下面是 AOP 的一些基本概念

          aspect (方面):實(shí)現(xiàn)了 cross-cutting 功能,是針對(duì)方面的模塊,是為題的不同關(guān)注點(diǎn),我們可以將這些方面通過(guò)某種方式加入到核心關(guān)注點(diǎn)中。

          jointpoint (連接點(diǎn)):連接點(diǎn)是方面插入應(yīng)用程序的地方,該點(diǎn)能被方法調(diào)用。

          advice (通知): advice 是我們關(guān)注點(diǎn)功能的實(shí)現(xiàn),它通知程序新的行為。如在權(quán)限處理中, permission advice 包括權(quán)限控制的實(shí)現(xiàn)代碼。

          pointcut (切入點(diǎn)): pointcut 可以指定把哪些 advice 應(yīng)用到 jointpoint 上去、如何應(yīng)用上去以及應(yīng)用的位置。

          AOP 包括三個(gè)開(kāi)發(fā)步驟:

          關(guān)注點(diǎn)分解:分解需求提取出橫切關(guān)注點(diǎn)和一般關(guān)注點(diǎn)。把核心模塊級(jí)關(guān)注點(diǎn)和系統(tǒng)級(jí)的橫切關(guān)注點(diǎn)分離開(kāi)來(lái)。就前面所提到的網(wǎng)上購(gòu)物系統(tǒng)來(lái)說(shuō),可以分解出四個(gè)關(guān)注點(diǎn):核心的訂單處理、權(quán)限、日志和事務(wù)。

          關(guān)注點(diǎn)實(shí)現(xiàn):各自獨(dú)立的實(shí)現(xiàn)這些關(guān)注點(diǎn)。

          關(guān)注點(diǎn)的重新組合:在這一步里,通過(guò)創(chuàng)建一個(gè)模塊單元來(lái)指定關(guān)注點(diǎn)重組的規(guī)則。重組過(guò)程被稱為織入( Weaving )。以前邊的網(wǎng)上購(gòu)物系統(tǒng)來(lái)說(shuō),可以通過(guò)某種方式指定每個(gè)操作結(jié)束后需要記錄日志、操作開(kāi)始前要驗(yàn)證是否有權(quán)限、操作失敗要事務(wù)回滾。

          ?

          ?

          下面是 AspectJ 實(shí)現(xiàn)日志記錄的一個(gè)例子:

          public aspect AutoLog

          {?

          pointcut publicMethods() :

          execution(public * org.apache.cactus..*(..));

          pointcut logObjectCalls() :

          execution(* Logger.*(..));

          pointcut loggableCalls() :

          publicMethods() && ! logObjectCalls();

          before() : loggableCalls()

          {

          Logger.entry(thisJoinPoint.getSignature().toString());

          }

          after() : loggableCalls()

          {

          Logger.exit(thisJoinPoint.getSignature().toString());

          }

          }

          可以看到,這里邊有很多 Java 中沒(méi)有的關(guān)鍵字,比如 aspect pointcut 等。這些關(guān)鍵字都是 AspectJ 提供的,使用這些擴(kuò)展我們可以用 AspectJ Java 類增加字段及方法,甚至使 Java 支持多繼承。

          ?

          ?

          Spring 沒(méi)有自己進(jìn)行 AOP 技術(shù)的實(shí)現(xiàn) , 它的主要實(shí)現(xiàn)技術(shù)來(lái)自于 AOP 聯(lián)盟( AOPAlliance )。

          Spring AOP 中的術(shù)語(yǔ)不像 AspectJ 那樣多,因而也更容易理解和學(xué)習(xí)。只要理解三個(gè)概念就可以, advice , pointcut advisor

          advice 是要向別的模塊內(nèi)部不同的地方注入的代碼

          pointcut 定義了需要注入 advice 的位置,通常是某個(gè)特定的類的一個(gè) public 方法

          advisor pointcut advice 的裝配器,是將 advice 注入主程序中預(yù)定義位置的代碼

          posted on 2007-02-20 00:50 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(207) 評(píng)論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 留坝县| 长乐市| 赞皇县| 社会| 澳门| 德庆县| 肥东县| 乌什县| 博罗县| 新蔡县| 油尖旺区| 开化县| 高安市| 天门市| 民县| 宁化县| 北辰区| 关岭| 云浮市| 儋州市| 共和县| 万盛区| 安庆市| 清苑县| 自贡市| 太原市| 康马县| 四平市| 北流市| 濉溪县| 三原县| 杭锦后旗| 梅州市| 张家川| 嵊泗县| 崇阳县| 定边县| 岳普湖县| 乌拉特后旗| 江津市| 剑川县|