AspectJ-Maven-Plugin编译插件则采取了另辟蹊径的方法。它在编译阶段直接对源代码或字节码进行修改,确保切面逻辑与业务代码的无缝融合。 使用AspectJ编译时织入实现AOP 定义:AspectJ-Maven-Plugin是一个Maven编译插件,用于在编译时直接修改源代码或字节码,以集成切面逻辑。 pom.xml中添加AspectJ-Maven-Plugin: <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin AspectJ-Maven-Plugin:是一个Maven编译插件,通过编译时修改字节码来集成切面逻辑,性能最佳,但需要重新编译项目。
AOP使用的是AspectJ,通过maven打包时织入,使用了maven插件aspectj-maven-plugin。因此正常织入,并把打出的jar包放在服务上运行也是正常的。 图片 附: <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin
ASPECT WITH ARGS: " + Arrays.toString(joinPoint.getArgs())); } } 实现AOP的常见套路 1、在编译期阶段实现AOP 方法一:通过aspectj-maven-plugin 2.22.2</version> </plugin> <plugin> <groupId>com.nickwongdev</groupId> <artifactId>aspectj-maven-plugin Codehaus的官方提供的插件只能支持JDK8(包含JDK8)以下的版本,而本示例的插件可以支持到JDK13 本示例的插件github地址:https://github.com/nickwongdev/aspectj-maven-plugin Codehaus的官方插件地址:https://github.com/mojohaus/aspectj-maven-plugin 以及相应介绍:https://www.mojohaus.org/aspectj-maven-plugin
System.out.println("要出去了:" + result); return result; } } 普通场景验证 先本系统来个Test类验证切面是否正确: POM中引入aspectj-maven-plugin prepare(DTEngineRequest engineRequest) throws Exception { return true; } } 在pom中添加了相同配置的aspectj-maven-plugin aspectj-maven-plugin 官网 都不用仔细看,打眼一看,发现了什么~ 如果AspectJ 连jar包中被编译过的类都可以重新编织切面,把我们的jar包引入默认环境,还不是手拿把掐? 按说明向aspectj-maven-plugin插件的配置中添加weaveDependencies(编织依赖)属性,填入我们的jar包。 摘自:segmentfault.com/a/1190000038973480 比如,我们最常用的maven-compiler-plugin,是用来编译Java代码的,而我们本文涉及到的插件aspectj-maven-plugin
重要配置 下面是最最重要的pom配置了,这里我使用了aspectj-maven-plugin 这个插件来对spring-aspects.jar进行编织。如下所示: <? <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin
3.4、maven插件 因为是需要编译时织入代码,所以需要maven插件的支持:https://github.com/mojohaus/aspectj-maven-plugin 配置好pom.xml文件即可 target> 可能还会遇到无法识别Lombok的错误,配置如下则解决该问题: <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin
<plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin
transactionManager" /> </``bean``> | 同时在 Maven 的 pom 文件中加入 spring-aspects 和 aspectjrt 的 dependency 以及 aspectj-maven-plugin version``> </``dependency``> <``plugin``> <``groupId``>org.codehaus.mojo</``groupId``> <``artifactId``>aspectj-maven-plugin
public void insertOrder() { //SQL操作 } } 4.3 maven中加入spring-aspects 和 aspectjrt 的依赖以及 aspectj-maven-plugin
Maven插件: <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin
maven自动化构建 显然,自己写脚本还是比较麻烦的,如果用如maven这样的自动化构建工具的话就会方便很多,codehaus提供了一个ajc的编译插件aspectj-maven-plugin,我们只需要在 build/plugins标签下加上这个插件的配置即可: <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin 比较分析 Spring AOP 和 AspectJ 之间的差别 AOP之@AspectJ技术原理详解 AspectJ 编译时织入(Compile Time Weaving, CTW) Mojohaus AspectJ-Maven-Plugin
<version>1.8.9</version> </dependency> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin 的内容可以参考本篇文章进行学习 ---- 收获 编译器也能修改 class 实现增强 编译器增强能突破代理仅能通过方法重写增强的限制:可以对构造方法、静态方法等实现增强 注意 版本选择了 java 8, 因为目前的 aspectj-maven-plugin
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin</artifactId>
version> </dependency> 配置 ajc 编译器插件: <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin
advanced_aspectj_01 收获 编译器也能修改 class 实现增强 编译器增强能突破代理仅能通过方法重写增强的限制:可以对构造方法、静态方法等实现增强 注意 版本选择了 java 8, 因为目前的 aspectj-maven-plugin
F4 getF4() { return context.getBean(F4.class); } AOP 实现之 ajc 编译器 仅使用 @Aspect 注解,并未使用 Spring,使用依赖 aspectj-maven-plugin
advanced_aspectj_01 收获 编译器也能修改 class 实现增强 编译器增强能突破代理仅能通过方法重写增强的限制:可以对构造方法、静态方法等实现增强 注意 版本选择了 java 8, 因为目前的 aspectj-maven-plugin