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

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

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

    wiflish
    Loving Life! Loving Coding!
    posts - 98,comments - 98,trackbacks - 0

    【轉】AOP實現(三)——Spring 2.0中Pointcut的定義

    關鍵字: Pointcut的定義
    Spring 2.0 中, Pointcut 的定義包括兩個部分: Pointcut 表示式 (expression) Pointcut 簽名 (signature) 。讓我們先看看 execution 表示式的格式:
    java 代碼
    1. execution(modifier-pattern?
    2. ????????? ret-type-pattern
    3. ????????? declaring-type-pattern?
    4. ????????? name-pattern(param-pattern)
    5. ????????? throws-pattern?)

    括號中各個 pattern 分別表示修飾符匹配( modifier-pattern? )、返回值匹配( ret-type-pattern )、類路徑匹配( declaring-type-pattern? )、方法名匹配( name-pattern )、參數匹配( (param-pattern) )、異常類型匹配( throws-pattern? ),其中后面跟著“ ? ”的是可選項。
    在各個 pattern 中可以使用“ * ”來表示匹配所有。在 (param-pattern) 中,可以指定具體的參數類型,多個參數間用“ , ”隔開,各個也可以用“ * ”來表示匹配任意類型的參數,如 (String) 表示匹配一個 String 參數的方法; (*,String) 表示匹配有兩個參數的方法,第一個參數可以是任意類型,而第二個參數是 String 類型;可以用 (..) 表示零個或多個任意參數。
    現在來看看幾個例子:
    1 execution(* *(..))
    表示匹配所有方法
    2 execution(public * com. savage.service.UserService.*(..))
    表示匹配 com.savage.server.UserService 中所有的公有方法
    3 execution(* com.savage.server..*.*(..))
    表示匹配 com.savage.server 包及其子包下的所有方法
    除了 execution 表示式外,還有 within 、 this target 、 args Pointcut 表示式。 一個 Pointcut 定義由 Pointcut 表示式和 Pointcut 簽名組成,例如:
    java 代碼
    1. //Pointcut表示式
    2. @Pointcut("execution(* com.savage.aop.MessageSender.*(..))")
    3. //Point簽名
    4. privatevoid log(){}?????????????????????????????

    然后要使用所定義的 Pointcut 時,可以指定 Pointcut 簽名,如
    java 代碼
    1. @Before("og()")

    上面的定義等同與:
    java 代碼
    1. @Before ( "execution(* com.savage.aop.MessageSender.*(..))" )

    Pointcut 定義時,還可以使用 && 、 || ! 運算,如:
    java 代碼
    1. @Pointcut("execution(* com.savage.aop.MessageSender.*(..))")
    2. privatevoid logSender(){}

    3. @Pointcut("execution(* com.savage.aop.MessageReceiver.*(..))")
    4. privatevoid logReceiver(){}

    5. @Pointcut("logSender() || logReceiver()")
    6. privatevoid logMessage(){}

    這個例子中, logMessage() 將匹配任何 MessageSender MessageReceiver 中的任何方法。
    還可以將一些公用的 Pointcut 放到一個類中,以供整個應用程序使用,如:
    java 代碼
    1. package com.savage.aop;

    2. import org.aspectj.lang.annotation.*;

    3. publicclass Pointcuts {
    4. ?? @Pointcut("execution(* *Message(..))")
    5. ?? publicvoid logMessage(){}

    6. ?? @Pointcut("execution(* *Attachment(..))")
    7. ?? publicvoid logAttachment(){}

    8. ?? @Pointcut("execution(* *Service.*(..))")
    9. ?? publicvoid auth(){}
    10. }

    在使用這些 Pointcut 時,指定完整的類名加上 Pointcut 簽名就可以了,如:
    java 代碼
    1. package com.savage.aop;

    2. import org.aspectj.lang.JoinPoint;
    3. import org.aspectj.lang.annotation.*;

    4. @Aspect
    5. publicclass LogBeforeAdvice {
    6. ?? @Before("com.sagage.aop.Pointcuts.logMessage()")
    7. ?? publicvoid before(JoinPoint joinPoint) {
    8. ????? System.out.println("Logging before " + joinPoint.getSignature().getName());
    9. ?? }
    10. }

    當基于 XML Sechma 實現 Advice 時,如果 Pointcut 需要被重用,可以使用 來聲明 Pointcut ,然后在需要使用這個 Pointcut 的地方,用 pointcut-ref 引用就行了,如:
    xml 代碼
    ?
    1. <aop:config>??
    2. ????<aop:pointcut?id="log"???
    3. ??????????expression="execution(*?com.savage.simplespring.bean.MessageSender.*(..))"/>??
    4. ????<aop:aspect?id="logging"?ref="logBeforeAdvice">??
    5. ????????<aop:before?pointcut-ref="log"?method="before"/>??
    6. ????????<aop:after-returning?pointcut-ref="log"?method="afterReturning"/>??
    7. ????</aop:aspect>??
    8. </aop:config>??

    posted on 2008-12-30 23:15 想飛的魚 閱讀(1169) 評論(0)  編輯  收藏 所屬分類: spring

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


    網站導航:
     
    主站蜘蛛池模板: 国产精品免费网站| 无码精品人妻一区二区三区免费看| 99久久人妻精品免费一区| 亚洲精品一级无码鲁丝片| 日韩毛片在线免费观看| 波多野结衣免费视频观看| 亚洲精品NV久久久久久久久久| 亚洲hairy多毛pics大全| 国产精品va无码免费麻豆| 含羞草国产亚洲精品岁国产精品| 国产gav成人免费播放视频| 免费国产在线精品一区| 国产亚洲人成A在线V网站| 精品视频在线免费观看| 内射少妇36P亚洲区| 在线观看永久免费| 亚洲AV之男人的天堂| yellow视频免费看| 亚洲人JIZZ日本人| 免费下载成人电影| 亚洲爆乳无码精品AAA片蜜桃| 成人伊人亚洲人综合网站222| 国产线视频精品免费观看视频| 亚洲日本在线看片| 成人五级毛片免费播放| 亚洲美女视频网址| 最新仑乱免费视频| 免费国产高清毛不卡片基地| 亚洲日韩乱码中文无码蜜桃臀网站| 久久久久免费精品国产小说| 亚洲午夜理论片在线观看| 亚洲精品亚洲人成在线观看下载| 久久aⅴ免费观看| 亚洲中文字幕无码爆乳| 国产成人精品日本亚洲专区61| 久久久久久毛片免费播放| 国产亚洲人成网站观看| 免费观看美女用震蛋喷水的视频| 国产精品久久久久久亚洲影视| 亚洲乳大丰满中文字幕| 67194成是人免费无码|