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

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

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

    最愛Java

    書山有路勤為徑,學(xué)海無涯苦作舟

    《AspectJ Cookbook》讀書筆記八: 捕獲屬性上的連接點(diǎn)

    一. 捕獲何時(shí)訪問對(duì)象的屬性
        使用get(Signature)切入點(diǎn)。get(Signature)切入點(diǎn)的語法如下:
        pointcut <pointcut name>(<any values to be picked up>) : get(<optional modifier> <type> <class>.<field>);
        get(Signature)具有4個(gè)關(guān)鍵特征:
        1.get(Signature)切入點(diǎn)會(huì)觸發(fā)直接在其中(而不僅僅是在訪問器方法的調(diào)用上)訪問屬性的通知。
        2.get(Signature)切入點(diǎn)不能捕獲對(duì)靜態(tài)屬性的訪問,盡管從AspectJ的語法角度講以這種方式定義切入點(diǎn)是完全合法的。
        3.Signature必須解析成特定類的屬性。
        4.Signature可以包含通配符,用于選擇不同屬性上的一系列連接點(diǎn)。

    package com.aspectj;

    public aspect GetRecipe {
        
    /**
         * Specifies calling advice whenever an attribute matching the following rules
         * is accessed:
         * 
         * Type:String 
         * Class Name:MyClass 
         * Attribute Name:name
         
    */

        pointcut getNamePointcut(): get(String MyClass.name);
        
        
    // Advice declaration
        before():getNamePointcut() {
            System.out.println(
    "---------- Aspect Advice Logic ----------");
            System.out.println(
    "In the advice picked by getNamePointcut()");
            System.out.println(
    "Signature: " + thisJoinPoint.getSignature());
            System.out.println(
    "Source Line: " + thisJoinPoint.getSourceLocation());
            System.out.println(
    "-----------------------------------------");
        }

    }

        你可能期待類使用static和final關(guān)鍵字定義一個(gè)常量屬性,這樣,在訪問這個(gè)常量時(shí)你就可能使用get(Signature)切入點(diǎn)來捕獲。
        

    package com.aspectj;

    public aspect GetConstant {
        
    /**
         * Specifies calling advice whenever an attribute matching the following rules
         * is accessed:
         * 
         * Type:String 
         * Class Name:MyClass 
         * Attribute Name:CONSTANT
         
    */

        pointcut getConstantPointcut():get(
    public static final String MyClass.CONSTANT);
        
        
    //Advice declaration
        before():getConstantPointcut() {
            System.out.println(
    "---------- Aspect Advice Logic ----------");
            System.out.println(
    "In the advice picked by getConstantPointcut()");
            System.out.println(
    "Signature: " + thisJoinPoint.getSignature());
            System.out.println(
    "Source Line: " + thisJoinPoint.getSourceLocation());
            System.out.println(
    "-----------------------------------------");        
        }

    }

     

    二. 捕獲訪問的字段值
        使用after returning(<ReturnValue>)形式的通知。它在聲明的returning()部分中帶有一個(gè)標(biāo)識(shí)符,用于包含訪問過的值。

    package com.aspectj;

    public aspect CaptureAccessedFieldValue {
        pointcut getNamePointcut() : get(String MyClass.name);
        
        
    //Advice declaration
        after() returning(String value) : getNamePointcut() {
            System.out.println(
    "---------- Aspect Advice Logic ----------");
            System.out.println(
    "In the advice picked by getNamePointcut()");
            System.out.println(
    "Signature: " + thisJoinPoint.getStaticPart().getSignature());
            System.out.println(
    "Source Line: " + thisJoinPoint.getStaticPart().getSourceLocation());
            System.out.println(
    "-----------------------------------------");        
        }

    }


    三. 捕獲何時(shí)修改對(duì)象的字段
        使用set(Signature)切入點(diǎn)。set(Signature)切入點(diǎn)的語法如下:
        pointcut <pointcut name>(<any values to be picked up>) : set(<optional modifier> <type> <class>.<field>);
        
        set(Signature)具有4個(gè)關(guān)鍵特征:
        1.set(Signature)切入點(diǎn)在修改字段時(shí)觸發(fā)。
        2.set(Signature)切入點(diǎn)不能捕獲對(duì)靜態(tài)字段的修改,盡管從AspectJ的語法角度講以這種方式定義切入點(diǎn)是完全合法的。
        3.Signature必須解析成特定類的屬性。
        4.Signature可以包含通配符,用于選擇不同屬性上的一系列連接點(diǎn)。

    package com.aspectj;

    public aspect SetRecipe {
        
    /*
         * Specifies calling advice whenever an attribute
         * matching the following rules is modified:
         * 
         * Type: String
         * Class Name: MyClass
         * Attribute: name
         
    */

        pointcut setNamePointcut() :set(String MyClass.name);
        
        
    //Advice declaration
        before():setNamePointcut() && !within(SetRecipe+{
            System.out.println(
    "---------- Aspect Advice Logic ----------");
            System.out.println(
    "In the advice picked by setNamePointcut()");
            System.out.println(
    "Signature: " + thisJoinPoint.getSignature());
            System.out.println(
    "Source Line: " + thisJoinPoint.getSourceLocation());
            System.out.println(
    "-----------------------------------------");        
        }

    }

     

    四. 在修改字段時(shí)捕獲它的值
        結(jié)合使用args([Types | Identifiers])切入點(diǎn)和set(Signature)切入點(diǎn),展示字段的新值,該字段被設(shè)置成切入點(diǎn)上的標(biāo)識(shí)符,可將其傳遞給相應(yīng)的通知。

    package com.aspectj;

    public aspect CaptureModifiedFieldValue {
        pointcut setNamePointcut(String newValue):set(String MyClass.name) 
    && args(newValue);
        
        
    //Advice declaration
        before(String newValue) : setNamePointcut(newValue) {
            System.out.println(
    "---------- Aspect Advice Logic ----------");
            System.out.println(
    "In the advice picked by setNamePointcut()");
            System.out.println(
    "Signature: " + thisJoinPoint.getSignature());
            System.out.println(
    "Source Line: " + thisJoinPoint.getSourceLocation());
            System.out.println(
    "-----------------------------------------");                
        }

    }

    posted on 2008-08-22 10:43 Brian 閱讀(1180) 評(píng)論(0)  編輯  收藏 所屬分類: 《AspectJ Cookbook》讀書筆記

    公告


    導(dǎo)航

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

    統(tǒng)計(jì)

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 看免费毛片天天看| 免费大学生国产在线观看p| 黄色免费在线观看网址| 亚洲成AV人片久久| 亚洲女同成av人片在线观看| 日韩成人免费在线| 很黄很色很刺激的视频免费| 在线播放免费人成毛片乱码| 特级毛片在线大全免费播放| 亚洲人成网站免费播放| 亚洲国产成人久久77| 亚洲AV本道一区二区三区四区| 国产精品V亚洲精品V日韩精品| 毛片免费全部免费观看| **一级毛片免费完整视| 久久青青草原国产精品免费| 一级**爱片免费视频| 日产久久强奸免费的看| 成人亚洲国产精品久久| 亚洲AV永久无码精品网站在线观看| 亚洲人成网站18禁止久久影院 | 国产亚洲无线码一区二区| 免费一看一级毛片全播放| 日韩免费高清一级毛片在线| 青娱乐免费视频在线观看| **俄罗斯毛片免费| 97碰公开在线观看免费视频| 99re在线这里只有精品免费| 野花香在线视频免费观看大全 | 四虎免费影院4hu永久免费| AV片在线观看免费| 在线看片免费不卡人成视频| 亚洲一区二区三区免费在线观看 | 亚洲精品无码av人在线观看| av在线亚洲欧洲日产一区二区| 婷婷综合缴情亚洲狠狠尤物| 免费在线观看一级毛片| 亚洲精品国产高清不卡在线 | 五月天婷婷免费视频| 国产成人精品免费视频大全| 国产成人无码精品久久久免费|