<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动态图 | 无码人妻一区二区三区免费视频| 亚洲色图激情文学| 国产AV旡码专区亚洲AV苍井空| 亚洲国产精品乱码在线观看97| 亚洲激情电影在线| 亚洲一区中文字幕在线电影网| 亚洲av无码不卡久久| 亚洲欧美日韩一区二区三区 | 亚洲成人午夜在线| 亚洲一区免费观看| 亚洲制服丝袜精品久久| 亚洲精品456人成在线| 亚洲日韩一区二区三区| 香蕉视频亚洲一级| 免费VA在线观看无码| 精品国产免费一区二区三区| 成人无码a级毛片免费| 久久免费精品视频| 日本人的色道免费网站| 欧美日韩国产免费一区二区三区| 青青青青青青久久久免费观看| 免费jjzz在线播放国产| 亚洲日韩精品无码专区网址| 亚洲天堂中文字幕| 亚洲娇小性xxxx色| 免费无遮挡无码视频在线观看 | 亚洲a级在线观看| 亚洲国产成人AV网站| eeuss影院免费直达入口| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 激情综合色五月丁香六月亚洲| 亚洲国产精品无码av| 亚洲免费视频观看| 免费播放国产性色生活片| 久草免费福利视频| 国产精品视频免费一区二区| 免费大黄网站在线观看|