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
          主站蜘蛛池模板: 遂川县| 利川市| 株洲县| 镇巴县| 珠海市| 天津市| 石台县| 内乡县| 蒙阴县| 贡嘎县| 汶川县| 承德市| 吉木萨尔县| 通江县| 保山市| 合作市| 淳化县| 晋宁县| 海盐县| 峨山| 汝南县| 盘山县| 宝兴县| 茂名市| 桑植县| 壶关县| 屯门区| 南丰县| 福泉市| 溧阳市| 洪江市| 永济市| 安仁县| 乌什县| 平邑县| 邹城市| 清涧县| 镇安县| 聂荣县| 伊宁市| 台东市|