• AspectJ代码修改


    一:

    1 public aspect MyAspect {
    2     pointcut move():
    3         call(void Point.setX(int));
    4     before(): move() {
    5         System.out.println("before call Point.setX");
    6     }
    7 }

    AOP后,修改了.class文件,修改后为

    1   public void setXY(int x, int y)
    2   {
    3     System.out.println("Point.setXY is calling...");
    4     MyAspect.aspectOf().ajc$before$aspects_MyAspect$1$c0539092(); setX(x);
    5     setY(y);
    6   }

    二:

    1 public aspect MyAspect {
    2     pointcut move():
    3         call(void Point.setX(int));
    4     after(): move() {
    5         System.out.println("before call Point.setX");
    6     }
    7 }

    修改后:

    1   public void setXY(int x, int y)
    2   {
    3     System.out.println("Point.setXY is calling...");
    4     try { setX(x); } catch (Throwable localThrowable) { MyAspect.aspectOf().ajc$after$aspects_MyAspect$1$c0539092(); throw localThrowable; } MyAspect.aspectOf().ajc$after$aspects_MyAspect$1$c0539092();
    5     setY(y);
    6   }

    三:

    1 public aspect MyAspect {
    2     pointcut move():
    3         call(void Point.setX(int));
    4     after() returning: move() {
    5         System.out.println("before call Point.setX");
    6     }
    7 }

    修改后:

    1   public void setXY(int x, int y)
    2   {
    3     System.out.println("Point.setXY is calling...");
    4     setX(x); MyAspect.aspectOf().ajc$afterReturning$aspects_MyAspect$1$c0539092();
    5     setY(y);
    6   }

    四:

    1 public aspect MyAspect {
    2     pointcut move():
    3         call(void Point.setX(int));
    4     after() throwing: move() {
    5         System.out.println("before call Point.setX");
    6     }
    7 }

    修改后:

    1   public void setXY(int x, int y)
    2   {
    3     System.out.println("Point.setXY is calling...");
    4     try { setX(x); } catch (Throwable localThrowable) { MyAspect.aspectOf().ajc$afterThrowing$aspects_MyAspect$1$c0539092(); throw localThrowable; }
    5     setY(y);
    6   }

     五:

     1 public aspect MyAspect {
     2     pointcut move():
     3         call(* *.setX(int));
     4     pointcut canMove():
     5         within(javaexercise.FigureElement);
     6     
     7     Object around(): move(){
     8         System.out.println("around call Point.setX"
     9         );
    10         return proceed();
    11     }
    12 }

    修改后:

     1   public void setXY(int x, int y)
     2   {
     3     System.out.println("Point.setXY is calling...");
     4     int i = x; Point localPoint = this; setX_aroundBody1$advice(this, localPoint, i, MyAspect.aspectOf(), null);
     5     setY(y);
     6   }
     7   private static final void setX_aroundBody0(Point paramPoint1, Point paramPoint2, int paramInt)
     8   {
     9     paramPoint2.setX(paramInt);
    10   }
    11 
    12   private static final Object setX_aroundBody1$advice(Point ajc$this, Point target, int x, MyAspect ajc$aspectInstance, AroundClosure ajc$aroundClosure)
    13   {
    14     System.out.println("around call Point.setX");
    15 
    16     AroundClosure localAroundClosure = ajc$aroundClosure; setX_aroundBody0(ajc$this, target, x); return null;
    17   }

     六:

     1 public aspect MyAspect {
     2     pointcut move():
     3         execution(* *.setX(int));
     4     pointcut canMove():
     5         within(javaexercise.FigureElement);
     6     
     7     Object around(): move(){
     8         System.out.println("around call Point.setX"
     9         );
    10         return proceed();
    11     }
    12 }

    修改后:

     1   public void setXY(int x, int y)
     2   {
     3     System.out.println("Point.setXY is calling...");
     4     setX(x);
     5     setY(y);
     6   }
     7   public void setX(int x)
     8   {
     9     int i = x; setX_aroundBody1$advice(this, i, MyAspect.aspectOf(), null);
    10   }
    11   private static final void setX_aroundBody0(Point ajc$this, int x)
    12   {
    13     System.out.println("Point.setX is calling...");
    14     ajc$this.x = x;
    15   }
    16 
    17   private static final Object setX_aroundBody1$advice(Point ajc$this, int x, MyAspect ajc$aspectInstance, AroundClosure ajc$aroundClosure)
    18   {
    19     System.out.println("around call Point.setX");
    20 
    21     AroundClosure localAroundClosure = ajc$aroundClosure; setX_aroundBody0(ajc$this, x); return null;
    22   }

    七:

     1 public aspect MyAspect {
     2     pointcut move():
     3         execution(* *.setX(int));
     4     pointcut canMove():
     5         within(javaexercise.FigureElement);
     6     
     7     before(): move(){
     8         System.out.println("before call Point.setX");
     9     }
    10 }

    修改后:

     1   public void setXY(int x, int y)
     2   {
     3     System.out.println("Point.setXY is calling...");
     4     setX(x);
     5     setY(y);
     6   }
     7   public void setX(int x) {
     8     MyAspect.aspectOf().ajc$before$aspects_MyAspect$1$c0539092(); System.out.println("Point.setX is calling...");
     9     this.x = x;
    10   }
    11 aspect类里
    12   @Before(value="move()", argNames="")
    13   public void ajc$before$aspects_MyAspect$1$c0539092()
    14   {
    15     System.out.println("before call Point.setX");
    16   }

    八:

     1 public aspect MyAspect {
     2     pointcut move():
     3         execution(* *.setX(int));
     4     pointcut canMove():
     5         within(javaexercise.FigureElement);
     6     
     7     after(): move(){
     8         System.out.println("after call Point.setX");
     9     }
    10 }

    修改后:

     1   public void setXY(int x, int y)
     2   {
     3     System.out.println("Point.setXY is calling...");
     4     setX(x);
     5     setY(y);
     6   }
     7   public void setX(int x) {
     8     try {
     9       System.out.println("Point.setX is calling...");
    10       this.x = x; } catch (Throwable localThrowable) {
    11       MyAspect.aspectOf().ajc$after$aspects_MyAspect$1$c0539092(); throw localThrowable; } MyAspect.aspectOf().ajc$after$aspects_MyAspect$1$c0539092();
    12   }

    九:

     1 public aspect MyAspect {
     2     pointcut move():
     3         execution(* *.setX(int));
     4     pointcut canMove():
     5         within(javaexercise.FigureElement);
     6     
     7     after() returning: move(){
     8         System.out.println("after call Point.setX");
     9     }
    10 }

    修改后:

     1   public void setXY(int x, int y)
     2   {
     3     System.out.println("Point.setXY is calling...");
     4     setX(x);
     5     setY(y);
     6   }
     7   public void setX(int x) {
     8     System.out.println("Point.setX is calling...");
     9     this.x = x;
    10     MyAspect.aspectOf().ajc$afterReturning$aspects_MyAspect$1$c0539092();
    11   }

    十:

     1 public aspect MyAspect {
     2     pointcut move():
     3         execution(* *.setX(int));
     4     pointcut canMove():
     5         within(javaexercise.FigureElement);
     6     
     7     after() throwing: move(){
     8         System.out.println("after call Point.setX");
     9     }
    10 }

    修改后:

     1   public void setXY(int x, int y)
     2   {
     3     System.out.println("Point.setXY is calling...");
     4     setX(x);
     5     setY(y);
     6   }
     7   public void setX(int x) {
     8     try {
     9       System.out.println("Point.setX is calling...");
    10       this.x = x;
    11       return; } catch (Throwable localThrowable) { MyAspect.aspectOf().ajc$afterThrowing$aspects_MyAspect$1$c0539092(); } throw localThrowable;
    12   }

     十一:

    declare soft:Exception:within(javaexercise.FigureFactory);

    修改后:

      1 public class FigureFactory
      2 {
      3   public FigureFactory()
      4   {
      5     try
      6     {
      7       try
      8       {
      9         return; } catch (Exception localException1) { if ((localException1 instanceof RuntimeException)) throw localException1; throw new SoftException(localException1); }  } catch (Exception localException2) {
     10       if ((localException2 instanceof RuntimeException)) throw localException2; 
     11     }throw new SoftException(localException2);
     12   }
     13   public static Point makePoint(int x, int y) {
     14     try { try {  } catch (Exception localException) { if ((localException instanceof RuntimeException)) throw localException; throw new SoftException(localException); } Point p = new Point();
     15       try { p.setXY(x, y); } catch (Exception localException1) { if ((localException1 instanceof RuntimeException)) throw localException1; throw new SoftException(localException1); }
     16       return p; } catch (Exception localException2) { if ((localException2 instanceof RuntimeException)) throw localException2;  }
     17     throw new SoftException(localException2);
     18   }
     19 
     20   // ERROR //
     21   public static Line makeLine(int x1, int y1, int x2, int y2)
     22   {
     23     // Byte code:
     24     //   0: new 31    javaexercise/Line
     25     //   3: dup
     26     //   4: invokespecial 33    javaexercise/Line:<init>    ()V
     27     //   7: goto +26 -> 33
     28     //   10: astore 5
     29     //   12: aload 5
     30     //   14: instanceof 57
     31     //   17: ifeq +6 -> 23
     32     //   20: aload 5
     33     //   22: athrow
     34     //   23: new 52    org/aspectj/lang/SoftException
     35     //   26: dup
     36     //   27: aload 5
     37     //   29: invokespecial 55    org/aspectj/lang/SoftException:<init>    (Ljava/lang/Throwable;)V
     38     //   32: athrow
     39     //   33: astore 4
     40     //   35: aload 4
     41     //   37: iload_0
     42     //   38: iload_1
     43     //   39: invokestatic 34    javaexercise/FigureFactory:makePoint    (II)Ljavaexercise/Point;
     44     //   42: goto +26 -> 68
     45     //   45: astore 6
     46     //   47: aload 6
     47     //   49: instanceof 57
     48     //   52: ifeq +6 -> 58
     49     //   55: aload 6
     50     //   57: athrow
     51     //   58: new 52    org/aspectj/lang/SoftException
     52     //   61: dup
     53     //   62: aload 6
     54     //   64: invokespecial 55    org/aspectj/lang/SoftException:<init>    (Ljava/lang/Throwable;)V
     55     //   67: athrow
     56     //   68: invokevirtual 36    javaexercise/Line:setP1    (Ljavaexercise/Point;)V
     57     //   71: goto +26 -> 97
     58     //   74: astore 7
     59     //   76: aload 7
     60     //   78: instanceof 57
     61     //   81: ifeq +6 -> 87
     62     //   84: aload 7
     63     //   86: athrow
     64     //   87: new 52    org/aspectj/lang/SoftException
     65     //   90: dup
     66     //   91: aload 7
     67     //   93: invokespecial 55    org/aspectj/lang/SoftException:<init>    (Ljava/lang/Throwable;)V
     68     //   96: athrow
     69     //   97: aload 4
     70     //   99: iload_2
     71     //   100: iload_3
     72     //   101: invokestatic 34    javaexercise/FigureFactory:makePoint    (II)Ljavaexercise/Point;
     73     //   104: goto +26 -> 130
     74     //   107: astore 8
     75     //   109: aload 8
     76     //   111: instanceof 57
     77     //   114: ifeq +6 -> 120
     78     //   117: aload 8
     79     //   119: athrow
     80     //   120: new 52    org/aspectj/lang/SoftException
     81     //   123: dup
     82     //   124: aload 8
     83     //   126: invokespecial 55    org/aspectj/lang/SoftException:<init>    (Ljava/lang/Throwable;)V
     84     //   129: athrow
     85     //   130: invokevirtual 40    javaexercise/Line:setP2    (Ljavaexercise/Point;)V
     86     //   133: goto +26 -> 159
     87     //   136: astore 9
     88     //   138: aload 9
     89     //   140: instanceof 57
     90     //   143: ifeq +6 -> 149
     91     //   146: aload 9
     92     //   148: athrow
     93     //   149: new 52    org/aspectj/lang/SoftException
     94     //   152: dup
     95     //   153: aload 9
     96     //   155: invokespecial 55    org/aspectj/lang/SoftException:<init>    (Ljava/lang/Throwable;)V
     97     //   158: athrow
     98     //   159: aload 4
     99     //   161: areturn
    100     //   162: astore 10
    101     //   164: aload 10
    102     //   166: instanceof 57
    103     //   169: ifeq +6 -> 175
    104     //   172: aload 10
    105     //   174: athrow
    106     //   175: new 52    org/aspectj/lang/SoftException
    107     //   178: dup
    108     //   179: aload 10
    109     //   181: invokespecial 55    org/aspectj/lang/SoftException:<init>    (Ljava/lang/Throwable;)V
    110     //   184: athrow
    111     //
    112     // Exception table:
    113     //   from    to    target    type
    114     //   0    7    10    java/lang/Exception
    115     //   39    42    45    java/lang/Exception
    116     //   68    71    74    java/lang/Exception
    117     //   101    104    107    java/lang/Exception
    118     //   130    133    136    java/lang/Exception
    119     //   0    162    162    java/lang/Exception
    120   }
    121 
    122   static
    123   {
    124     try
    125     {
    126       return; } catch (Exception localException) { if ((localException instanceof RuntimeException)) throw localException;  }
    127     throw new SoftException(localException);
    128   }
    129 }

    //ERROR//是什么意思,难道是没有反编译成功?

    十二:

    1     before():get(* javaexercise.Point.*){
    2         System.out.println("before get");
    3     }

    修改为:

    1   public int getX() {
    2     System.out.println("Point.getX is called...");
    3     MyAspect.aspectOf().ajc$before$aspects_MyAspect$1$54b470a9(); return this.x;
    4   }

    十三:

    1     before():set(* javaexercise.Point.*){
    2         System.out.println("before set");
    3     }

    修改后:

    1   public void setX(int x) {
    2     System.out.println("Point.setX is calling...");
    3     MyAspect.aspectOf().ajc$before$aspects_MyAspect$1$48139b5(); this.x = x;
    4   }
  • 相关阅读:
    (十三)网络html查看器
    (十二)handler消息处理机制
    (十一)ANR产生原理
    (十)android 中数据存储与访问——使用SharedPreferences保存数据
    (九)android 中数据存储与访问——保存文件到手机内存
    (八)activity的生命周期
    (七)android 通知对话框,并且监听了返回键,当按下返回键也会创建一个对话框
    (六)采用HTML创建UI
    (五)使用代码创建UI
    (六)代码编写UI
  • 原文地址:https://www.cnblogs.com/javaleon/p/4033455.html
Copyright © 2020-2023  润新知