spring 09 AOP 实现之 ajc 编译器 / agent 类加载
AOP 实现之 ajc 编译器
aspectj 编译器
- 编译器也能修改 class 实现增强,直接通过修改字节码实现增强。
- 编译器增强能突破代理仅能通过方法重写增强的限制:可以对构造方法、静态方法等实现增强
3.在编译阶段进行增强
注意
- 版本选择了 java 8, 因为目前的 aspectj-maven-plugin 1.14.0 最高只支持到 java 16
- 一定要用 maven 的 compile 来编译, idea 不会调用 ajc 编译器
AOP 实现之 agent 类加载
类加载时可以通过 agent 修改 class 实现增强
在被增强方法内调用另一个被增强的方法(这是通过 this.方法调用),另一个方法依旧可以被增强,这是代理达不到的(代理是通过代理对象调用增强的方法来实现),因为直接修改了另一个方法的字节码,所以可以直接用本对象(this)增强。