posts - 431,  comments - 344,  trackbacks - 0

          捕獲何時訪問對象的屬性
                pointcut <pointcut name>(<any values to be picked up>) : get(<optional modifier> <type> <class>.<field>);

                get(Signature)切入點不能捕獲對靜態屬性的訪問,盡管從AspectJ的語法角度講以這種方式定義切入點是完全合法的。
                使用after() returning(<ReturnValue>)形式的通知,它在聲明的returning()部分中帶有一個標識符,用于包含訪問過的值。
          捕獲何時修改對象的字段
                pointcut <pointcut name>(<any values to be picked up>) : set(<optional modifier> <type> <class>.<field>);

          package com.eric.aspectj;

          public aspect GetRecipe {
           pointcut getNamePointcut() : get(String MyClass.name);
           before() : 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("--------------------------------------------------");
           }
           after() returning(String value) : getNamePointcut() {
            System.out.println("Value being accessed is " + value);
           }
          }

          package com.eric.aspectj;

          public class MyClass {
           public static final String CONSTANT = "CONSTANT STRING";
           private int number;
           private String name;

           public String getName()
           {
            System.out.println("In the getName() method");
            return this.name;
           }

           public void setName(String name)
           {
            System.out.println("In the setName(String) method");
            this.name = name;
            System.out.println("The name field has been set");
           }

           public int getNumber()
           {
            System.out.println("In the getNumber() method");
            return this.number;
           }

           public void setNumber(int number)
           {
            System.out.println("In the setNumber(int) method");
            this.number = number;
            System.out.println("The number field has been set");
           }

           public static final void main(String args[])
           {
            MyClass myObject = new MyClass();

            myObject.setName("Eric Chau");
            System.out.println("The name has been set");

            myObject.setNumber(88888888);
            System.out.println("The number has been set");
            System.out.println("Name Stored = " + myObject.getName());
            System.out.println("Number Stored = " + myObject.getNumber());

            System.out.println("The constant value is " + MyClass.CONSTANT);

           }
          }

          運行結果:
          In the setName(String) method
          The name field has been set
          The name has been set
          In the setNumber(int) method
          The number field has been set
          The number has been set
          In the getName() method
          -------------- Aspect Advice Logic ---------------
          In the advice picked by getNamePointcut()
          Signature: String com.eric.aspectj.MyClass.name
          Source Line: MyClass.java:11
          --------------------------------------------------
          Value being accessed is Eric Chau
          Name Stored = Eric Chau
          In the getNumber() method
          Number Stored = 88888888
          The constant value is CONSTANT STRING

          posted on 2007-07-04 14:31 周銳 閱讀(223) 評論(0)  編輯  收藏 所屬分類: AspectJ
          主站蜘蛛池模板: 台南市| 青浦区| 延寿县| 二手房| 宜川县| 瑞昌市| 南江县| 南和县| 如东县| 永善县| 犍为县| 外汇| 阿拉善左旗| 普洱| 神木县| 沙雅县| 金昌市| 西和县| 盐源县| 夏津县| 南康市| 法库县| 五华县| 宁安市| 建昌县| 浪卡子县| 兰考县| 新巴尔虎右旗| 商河县| 屏边| 岳西县| 双流县| 冀州市| 邹平县| 钟祥市| 凯里市| 贵南县| 黄平县| 枣阳市| 浠水县| 磐石市|