<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)

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产成人久久精品大牛影视 | 久久久久se色偷偷亚洲精品av| 最新久久免费视频| 国产成人精品日本亚洲网址 | 男人都懂www深夜免费网站| 嫖丰满老熟妇AAAA片免费看| 久久久久亚洲av无码专区喷水| 亚洲免费在线视频| 久久精品国产亚洲av麻豆小说| 亚洲视频免费在线看| 亚洲中文字幕无码一去台湾| 在线jlzzjlzz免费播放| 国产亚洲人成网站观看| 久久国产精品成人免费| 亚洲大香人伊一本线| 大陆一级毛片免费视频观看i| 亚洲av成人一区二区三区观看在线 | 最近2019中文字幕免费直播| 亚洲成电影在线观看青青| 黄瓜视频影院在线观看免费| 亚洲中文字幕无码中文| 吃奶摸下高潮60分钟免费视频| 亚洲网站免费观看| 久久精品免费大片国产大片 | 久久久久国产成人精品亚洲午夜 | 美美女高清毛片视频黄的一免费| 亚洲无码黄色网址| 无码专区AAAAAA免费视频| 激情综合亚洲色婷婷五月APP| 日本一道高清不卡免费| 中文字幕在线免费看| 亚洲视频在线不卡| 国产精品冒白浆免费视频| 中文字幕不卡免费高清视频| 亚洲日本在线观看网址| 波多野结衣免费视频观看 | 亚洲精品无码aⅴ中文字幕蜜桃| 亚洲精品无码成人片在线观看| 无码精品国产一区二区三区免费| 亚洲熟妇自偷自拍另欧美| 亚洲熟妇无码另类久久久|