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

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

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

    閑人野居
    好好學(xué)習(xí),天天向上
    posts - 57,  comments - 137,  trackbacks - 0
    ??? 這兩天忙著看AspectJ in Action 為了補(bǔ)一下AOP知識(shí)。看了Spring 2.0的規(guī)范,其中AOP部分已經(jīng)基本融合了AspectJ,看來有必要看一看AspectJ了。
    ?? 看了很多AOP的文章了,AOP這兩年發(fā)展的很慢,沒有什么新意,現(xiàn)在到處都是SOA,SCA了,不過研究了一下,覺得還是很有幫助的。尤其是增加系統(tǒng)的契約性和模塊的獨(dú)立性來說,很有幫助。
    ?? 當(dāng)然,學(xué)東西,基礎(chǔ)很重要。下面就說說AspectJ中的基本語法,有興趣的可以看看AspectJ in Action。
    ?? 先來說說pointcut,從字面的意思說的是切面的意思。也就是橫切的時(shí)候,會(huì)有哪些執(zhí)行點(diǎn)會(huì)被識(shí)別。只有先識(shí)別了,才能執(zhí)行相應(yīng)的Advice。
    ?? 基本的定義如下:
    ??
    ?? public pointcut accountOperations:call(* Account.*(..))
    ??
    ?? 1.通配符和pointcut 操作符
    • ?? *? 表示任何數(shù)量的字符,除了(.)
    • ??? .. 表示任何數(shù)量的字符包括任何數(shù)量的(.)
    • ?????? + 描述指定類型的任何子類或者子接口
    ??? java一樣,提供了一元和二元的條件表達(dá)操作符。
    ???
    一元操作符:!
    ?????
    二元操作符:||&&
    ?????
    優(yōu)先權(quán)同java

    ????? 2.
    簽名語法

    ?
    類型簽名樣式

    ?
    主要的例子:
    ? Account????????????????????????????? 類型Account
    ???
    *Account?? ?? ?? ?? ?? ?? ?? ?? ???? 使用Account名稱結(jié)束的類型,如SavingsAccountCheckingAccount
    ???
    java.*.Date???????????????????????? 類型Date在任何直接的java子包中,如java.util.Datejava.sql.Date
    ? ?
    java..*???????????????????????????????? 任何在java包或者所有子包中的類型,如java.awtjava.util或者java.awt.event java.util.logging
    ???
    javax..*Model+?????????????????? 所有javax包或者子包中以Model結(jié)尾的類型和其所有子類,如TableModel,TreeModel
    ?
    vector ????? ????????????????????? 所有除了Vector的類型
    ?
    Vector|| Hashtable????????????? Vector或者Hashtable類型
    ?
    java.util.RandomAccess+??? 實(shí)現(xiàn)RandomAccessList的所有子類
    ?? && java.util.List+
    ??
    ??
    方法和構(gòu)造器簽名模式

    ? public void Collection.clear():
    ?
    在Collection中同樣簽名的clear方法

    ? public void Account.debit(float) throws InsufficientBalanceException:
    ?
    Account中同樣簽名的debit方法

    ? public void Account.set*(*)
    ?
    Account中以set開頭,并且只有一個(gè)參數(shù)類型的方法

    ? public void Account.*()
    ?
    Account中所有的沒有參數(shù)的public void 方法
    ?
    ? public * Account.*()
    ? Account中所有沒有參數(shù)的public 方法

    ? public * Account.*(..)
    ?
    Account中所有的public 方法

    ? * Account.*(..)
    ?
    Account中的所有方法,包括private方法

    ? !public * Account.*(..)
    ?
    所有的非public 方法

    ?? * Account+.*(..)
    ??
    所有的方法,包括子類的方法

    ?? * java.io.Reader.read(..)
    ??
    所有的read方法

    ?? * java.io.Reader.read(char[],..)
    ??
    所有以read(char[])開始的方法,包括read(char[])和read(char[],int,int)

    ?? * javax..*.add*Listener(EventListener+)
    ??
    命名以add開始,以Listener結(jié)尾的方法,參數(shù)中為EventListener或子類

    ?? * *.*(..) throws RemoteException
    ??
    拋出RemoteException的所有方法

    ?? 構(gòu)造器,同上面
    ?? public Account.new()
    ??
    沒有參數(shù)的構(gòu)造器方法

    ??? 屬性簽名模式
    ??? 同方法一樣,屬性也查不多
    ??? * Account.*???
    ??? 所有的Account屬性

    ??? !public static * banking..*.*
    ??? 所有的非public static 屬性,在banking的包或者子包中
    ???
    ??? 3.主要的pointcuts類型
    ??
    ??? 分類pointcuts
    ??? 遵循特定的語法用于捕獲每一個(gè)種類的可使用連接點(diǎn)。
    ??? 主要的種類:
    • 方法執(zhí)行:execution(MethodSignature)
    • 方法調(diào)用:call(MethodSignature)
    • 構(gòu)造器執(zhí)行:execution(ConstructorSignature)
    • 構(gòu)造器調(diào)用:call(ConstructorSignature)
    • 類初始化:staticinitialization(TypeSignature)
    • 屬性讀操作:get(FieldSignature)
    • 屬性寫操作:set(FieldSignature)
    • 例外處理執(zhí)行:handler(TypeSignature)
    • 對(duì)象初始化:initialization(ConstructorSignature)
    • 對(duì)象預(yù)先初始化:preinitialization(ConstructorSignature)
    • Advice執(zhí)行:adviceexecution()
    ?? 基于控制流的pointcuts
    ?? 主要包括兩種類型的控制流:
    ?? cflow(Pointcut),捕獲所有的連接點(diǎn)在指定的方法執(zhí)行中,包括執(zhí)行方法本身。
    ?? cflowbelow(Pointcut),捕獲所有的連接點(diǎn)在指定的方法執(zhí)行中,除了執(zhí)行方法本身。

    ?? 如以下的例子:
    ?? cflow(call(* Account.debit(..))
    ?? 所有的debit方法中的連接點(diǎn),包括debit方法本身
    ?? cflowbelow(call(* Account.debit(..))
    ?? 所有debit方法中的連接點(diǎn),除了debit方法本身
    ?? cflow(transactedOperations())
    ?? 所有由transactedOperations捕獲的連接點(diǎn)
    ?? cflowbelow(execution(Account.new(..))
    ?? 所有在Account 構(gòu)造器中執(zhí)行的連接點(diǎn)

    ?? 基于詞匯結(jié)構(gòu)的連接點(diǎn)
    ?? 源代碼片斷。,如within()和withincode()
    ?? within :捕獲在指定類或者方面中的程序體中的所有連接點(diǎn),包括內(nèi)部類。
    ?? Withincode:用于捕獲在構(gòu)造器或者方法中的所有連接點(diǎn),包括在其中的本地類

    ?? 執(zhí)行對(duì)象連接點(diǎn)
    ?? 匹配this,和target對(duì)象,作為方法被調(diào)用的對(duì)象。
    ?? this(Account),所有Account的實(shí)例的執(zhí)行點(diǎn),匹配所有的連接點(diǎn),如方法調(diào)用,屬性設(shè)置,當(dāng)前的執(zhí)行對(duì)象為Account,或者其子類。
    ?? target(Account):匹配所有的連接點(diǎn),目標(biāo)對(duì)象為Account或其子類。

    ?? 必須執(zhí)行相應(yīng)的類型,不能使用*,或者..通配符。當(dāng)前靜態(tài)方法,不能被匹配。

    ?? 在within()和this()中的區(qū)別:
    ?? 一個(gè)是程序體,而另一個(gè)為對(duì)象執(zhí)行。

    ?? 參數(shù)pointcuts
    ?? 用于捕獲參數(shù)類型的連接點(diǎn)。
    ?? args(String,..,int)
    ?? args(RemoteException)

    ?? 條件檢測(cè)pointcuts
    ?? if(System.currentTimeMillis()>triggerTime)


    ?? 基本的語法就這些,不過AspectJ5 已經(jīng)增加了不少語法,主要關(guān)于Annotation 的,不過這部分還沒有仔細(xì)研究,以后再講解吧。希望能有所幫助

    ??

    posted on 2006-10-17 20:00 布衣郎 閱讀(4813) 評(píng)論(3)  編輯  收藏 所屬分類: aop

    FeedBack:
    # re: 關(guān)于AspectJ 中的pointcut 語法
    2006-10-18 14:25 | 123bingbing
    增開7群,號(hào)碼 30440732
    8群 30756649
    9群 30178567
    10群 28694497

    我們的qq群:15096318 學(xué)習(xí)程序的都可以來  回復(fù)  更多評(píng)論
      
    # re: 關(guān)于AspectJ 中的pointcut 語法
    2007-04-01 16:09 | coolfish
    # 方法執(zhí)行:execution(MethodSignature)
    # 方法調(diào)用:call(MethodSignature)

    這兩個(gè)區(qū)別在哪?  回復(fù)  更多評(píng)論
      
    # re: 關(guān)于AspectJ 中的pointcut 語法
    2007-04-02 08:05 | 布衣郎
    @coolfish
    execution(MethodSignature)表示在方法體中

    call則在方法外,由其他方法調(diào)用  回復(fù)  更多評(píng)論
      

    <2006年10月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    常用鏈接

    留言簿(12)

    隨筆分類(59)

    隨筆檔案(57)

    blog

    java

    uml

    搜索

    •  

    積分與排名

    • 積分 - 357268
    • 排名 - 155

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 久久99国产乱子伦精品免费| 好吊妞788免费视频播放| 亚洲欧洲自拍拍偷午夜色| 成人a免费α片在线视频网站| 精品韩国亚洲av无码不卡区| 久久精品国产亚洲一区二区| 无码国产精品一区二区免费虚拟VR | 一区视频免费观看| 亚洲av网址在线观看| 性感美女视频在线观看免费精品 | 91在线免费观看| 亚洲免费福利在线视频| 亚洲综合在线另类色区奇米| 中文字幕人成无码免费视频| 国产免费区在线观看十分钟 | a毛片免费在线观看| 亚洲中文字幕乱码一区| 亚洲AV永久无码精品一百度影院| 午夜爱爱免费视频| 四虎最新永久免费视频| 国产精品免费大片一区二区| 亚洲中文字幕久久精品无码A| 亚洲av女电影网| 亚洲国产日韩成人综合天堂| 免费人成网站在线观看10分钟| 国产午夜精品理论片免费观看| 亚洲AV一区二区三区四区| 亚洲黑人嫩小videos| 国产美女亚洲精品久久久综合| 日本一道综合久久aⅴ免费| 91免费播放人人爽人人快乐| 国产在线观看免费av站| 亚洲A∨精品一区二区三区下载| 亚洲精品免费在线| 久久精品国产精品亚洲色婷婷| 免费日韩在线视频| 夜夜嘿视频免费看| 无码国产精品一区二区免费式影视 | 国产成人在线观看免费网站| 免费精品国偷自产在线在线| 8090在线观看免费观看|