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

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

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

    最愛Java

    書山有路勤為徑,學海無涯苦作舟

    《AspectJ Cookbook》讀書筆記十五: 定義方面的關系

    一.繼承切入點定義
            創建一個抽象類。使用合適的public、protected或default訪問修飾符在抽象方面內定義可重用的切入點邏輯。最后,把抽象方面繼承進子方面中,以重用聲明的切入點。

    package com.aspectj;

    public abstract aspect BasePointcutDefinitionsAspect {
        
    public pointcut callPointcut() : call(void MyClass.foo(int,String));
    }

     

    package com.aspectj;

    public aspect ReusePointcutsRecipe extends BasePointcutDefinitionsAspect {
        
    //Advice declaration
        before():callPointcut()&&!within(ReusePointcutsRecipe+{
            System.out.println(
    "---------- Aspect Advice Logic ----------");
            System.out.println(
    "In the advice attached to the call point cut");
            System.out.println(
    "Target: " + thisJoinPoint.getTarget());
            System.out.println(
    "This: " + thisJoinPoint.getThis());
            System.out.println(
    "-----------------------------------------");        
        }

    }




    二.實現抽象切入點
            在聲明切入點和周圍的方面時,使用abstract關鍵字,并且不要提供任何切入點邏輯。

    package com.aspectj;

    public abstract aspect BaseAbstractAspect {
        
    /**
         * Specifies an abstract pointcut placeholder
         * for derived aspects to specify
         
    */

        
    public abstract pointcut abstractBasepointcut();
        
        
    /**
         * Specifies calling advice whenever a join point
         * picked by the abstractBasePointcut (specified
         * by specialized aspects) is encountered, and not within
         * this aspect or any inheriting aspects.
         
    */

        pointcut runAdvicePointcut() : abstractBasepointcut() 
    && !within(BaseAbstractAspect+);
    }

     

    package com.aspectj;

    public aspect AbstractImplementationAspect extends BaseAbstractAspect {
        
    /**
         * Specifies calling advice whenever a method
         * matching the following rules gets called:
         * 
         * Class Name: MyClass
         * Method Name:foo
         * Method Return:void
         * Method Parameters:an int followed by a string
         
    */

        
    public pointcut abstractBasepointcut():call(void MyClass.foo(int,String));
        
        
    //Advice declaration
        before():runAdvicePointcut(){
            System.out.println(
    "---------- Aspect Advice Logic ----------");
            System.out.println(
    "Signature: " + thisJoinPoint.getStaticPart().getSignature());
            System.out.println(
    "Source Location: " + thisJoinPoint.getStaticPart().getSourceLocation());
            System.out.println(
    "-----------------------------------------");            
        }


    }


    三.把類繼承進方面中
        使用extends關鍵字來聲明方面擴展類。示例為一個偽日志記錄類,它代表一種現有的日志記錄機制。其目標是:重構對應用程序中日志記錄類的所有現有的調用,并把日志記錄模塊化進一個方面中,它可以更靈活地織入進應用程序中。

    package com.aspectj;

    public class OOLogging {
        
    public void logEntry(String entry) {
            System.out.println(
    "Entry logged: " + entry);
        }

    }

     

    package com.aspectj;

    public aspect AOLogging extends OOLogging{
        
    /**
         * Specifies calling advice whenever a method
         * matching the following rules gets called:
         * 
         * Class Name: MyClass
         * Method Name:foo
         * Method Return:void
         * Method Parameters:an int followed by a string
         
    */

        pointcut callPointcut() : call(
    void MyClass.foo(int,String));
        
        
    //Advice declaration
        before():callPointcut()&&!within(AOLogging+)&&!within(AOLogging) {
            
    this.logEntry(thisJoinPoint.toShortString());
        }

    }


     

    posted on 2008-08-26 15:34 Brian 閱讀(282) 評論(0)  編輯  收藏 所屬分類: 《AspectJ Cookbook》讀書筆記

    公告


    導航

    <2008年8月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    統計

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产大陆亚洲精品国产| 亚洲综合偷自成人网第页色 | 亚洲熟妇av午夜无码不卡| 亚洲一区二区三区免费视频| 亚洲精品91在线| 真人做人试看60分钟免费视频| 亚洲码在线中文在线观看| 久久久久久曰本AV免费免费| 亚洲中字慕日产2020| 最近最新中文字幕完整版免费高清| 亚洲人成电影网站色| 免费永久国产在线视频| 一级毛片免费全部播放| 亚洲人成网站在线播放vr| 性色午夜视频免费男人的天堂| 亚洲国产精品张柏芝在线观看| 成年私人影院免费视频网站| 国产AV日韩A∨亚洲AV电影| 在线精品亚洲一区二区三区| 中文字幕不卡高清免费| 亚洲香蕉免费有线视频| 免费毛片在线播放| 久久久久久久国产免费看 | 亚洲国产成人无码av在线播放| 99精品全国免费观看视频| 黄色免费网址在线观看| 亚洲av无码不卡| 成年女人视频网站免费m | 日韩毛片一区视频免费| 亚洲国产精品国自产拍AV| 亚洲免费福利在线视频| 日日摸日日碰夜夜爽亚洲| 亚洲国产综合无码一区| A级毛片内射免费视频| 中文字幕看片在线a免费| 亚洲欧洲高清有无| 亚洲视频在线免费| 国产92成人精品视频免费| 又黄又大的激情视频在线观看免费视频社区在线 | 亚洲熟妇无码一区二区三区| 亚洲无线一二三四区手机|