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 }