版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/Dax1n/article/details/81944975 call 调用通知的环境是方法调用位置;而execution是方法执行位置,也就是方法签名处。 具体结合一个示例可以更简单跟容易理解: 1、pointcut配置: pointcut callPointCut():execution(public void com.javartisan.aspectj1.HelloWorld.say(String)); 此时是执行环境,查看一下被织入切面之后的字节码: // // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package com.javartisan.aspectj; import com.javartisan.aspectj.HelloWorldAspect; public class HelloWorld { public HelloWorld() { } public void say() { try { HelloWorldAspect.aspectOf().ajc$before$com_javartisan_aspectj_HelloWorldAspect$1$88992c11(); System.out.println("Hello World!"); } catch (Throwable var2) { HelloWorldAspect.aspectOf().ajc$after$com_javartisan_aspectj_HelloWorldAspect$2$88992c11(); throw var2; } HelloWorldAspect.aspectOf().ajc$after$com_javartisan_aspectj_HelloWorldAspect$2$88992c11(); } public static void main(String[] args) { (new HelloWorld()).say(); } } 2、pointcut配置 pointcut callPointCut(String name, int age):call(public void com.javartisan.aspectj2.HelloWorld.say(String,int))&&args(name,age); 织入切面的字节码如下: // // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package com.javartisan.aspectj; import com.javartisan.aspectj.HelloWorldAspect; public class HelloWorld { public HelloWorld() { } public void say() { System.out.println("Hello World!"); } public static void main(String[] args) { HelloWorld var10000 = new HelloWorld(); try { HelloWorldAspect.aspectOf().ajc$before$com_javartisan_aspectj_HelloWorldAspect$1$88992c11(); var10000.say(); } catch (Throwable var2) { HelloWorldAspect.aspectOf().ajc$after$com_javartisan_aspectj_HelloWorldAspect$2$88992c11(); throw var2; } HelloWorldAspect.aspectOf().ajc$after$com_javartisan_aspectj_HelloWorldAspect$2$88992c11(); } } 对比1与2可以知晓: call是在调用处进行织入通知代码,而对于execution是在连接点方法内部织入通知代码。 ———————————————— 版权声明:本文为CSDN博主「javartisan」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/Dax1n/article/details/81944975 |
|
来自: jasonbetter > 《JAVA》