<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

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


    網站導航:
     
    主站蜘蛛池模板: 一个人看的www免费高清| 毛片无码免费无码播放| 伊人婷婷综合缴情亚洲五月| 免费无码又爽又刺激高潮软件| 久久亚洲AV成人无码| 永久黄网站色视频免费| 成全视频免费观看在线看| 亚洲国产视频久久| 亚洲精品NV久久久久久久久久| 国产精品免费一区二区三区四区| 亚洲欧美成人av在线观看| 亚洲中文字幕无码久久综合网 | 2019中文字幕免费电影在线播放| 亚洲国产综合AV在线观看| 亚洲av无码乱码国产精品| 美女被免费视频网站a国产| 久久免费线看线看| 色婷婷亚洲一区二区三区| 亚洲永久永久永久永久永久精品| 国产免费观看网站| 国产成人免费在线| 好男人资源在线WWW免费| 亚洲熟妇成人精品一区| 亚洲Av无码精品色午夜| 免费人妻av无码专区| 国产人成免费视频网站| a级毛片视频免费观看| 久久水蜜桃亚洲AV无码精品| 亚洲色成人网一二三区| 亚洲精品国产综合久久一线| 午夜网站免费版在线观看| 1000部啪啪毛片免费看| 国产一区二区三区免费观看在线| 久久亚洲色WWW成人欧美| 精品久久久久久亚洲精品| 亚洲av福利无码无一区二区| 久久精品国产精品亚洲艾草网美妙| 女性无套免费网站在线看| 中文免费观看视频网站| 精品无码AV无码免费专区| 永久在线观看免费视频|