aspectj-maven-plugin 插件使用

本文介绍了如何使用aspectj-maven-plugin在编译阶段进行AOP切面处理,适用于未在Spring中注册的类。通过配置pom.xml,创建Aspect并举例说明了拦截UserServiceEnd类的printLog方法。尽管includes功能存在限制,且可能与lombok冲突,但整体使用相对简单。
摘要由CSDN通过智能技术生成

一、介绍

本文介绍的 aspectj-maven-plugin 插件 和 我们 大部分使用的 Spring Aop 不同, 我们通常会在 带有 @Aspect 注解的类上面 加上 @Service或者 @Component 注解,这样就可以 被Spring 管理 ,这样可以通过Aop 进行一些拦截.

但是有时 有一个接口没有在spring 注册, 但是也要对其拦截, 便可以使用 aspectj-maven-plugin, aspectj-maven-plugin 的相关介绍 aspectj-maven-plugin 的相关介绍 , 对应的GitHub 地址 GitHub地址

aspectj-maven-plugin 插件是在 编译阶段 compile 对文件进行增强. ,可以从 生成的.class 文件可以看出.
其实从上面 两个网址就完全可以 找到自己需要的信息,本文只是记录一下相关使用 以及 对应的includes 标签 功能上有一些缺陷, 如果有人 了解,还请指点。

二、Demo

2.1 pom.xml 里面 引入相关的依赖和插件

针对这里面的配置 相关解释一下, 我用的 是IDEA 工具,不是Eclipse , IDEA 对这个插件有一些支持不太友好.
true
默认为 false, 这里设置true,是 为了不让IDEA 编译, 但是 使用 Maven 或者 Jenkins 打包上线是没有问题的, 如运行 命令: mvn clean compile(或者其他的 mvn clean package 都是可以的) , 主要是IDEA 编译运行时 里面的配置不生效, 但是在maven 里面 是会进行替换掉的.

1.8
这里我选择的是 1.8 ,对应的是 aspectjtools 1.8.13 版本, 不同的版本是有一定的区别的,这里也需要注意.
trueignore

这里是信息的显示和忽略一些告警


        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.8.13</version>
        </dependency>
   
   .   . .  .
<plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>aspectj-maven-plugin</artifactId>
                <version>1.11</version>
                <configuration>
                    <complianceLevel>1.8</complianceLevel>
                    <source>1.8</source>
                    <target>1.8</target>
                    <showWeaveInfo>true</showWeaveInfo>
                  <Xlint>ignore</Xlint>
                    <encoding>UTF-8</encoding>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <configuration>
                            <skip>false</skip>
                        </configuration>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

2.2 再建一个 Aspect

@Aspect
public class MethodEndAspect {

    @Before("execution(* com.test.service.UserServiceEnd.printLog())")
    public void setStartTimeInThreadLocal(JoinPoint joinPoint) {
        System.out.println("before ...");
    }

}

2.3 建一个对应的 service 类

public class UserServiceEnd {
    public void printLog(){
        System.out.println(" no param.....");
    }
}

2.4 编译

输入 编译命令,mvn clean compile
在这里插入图片描述
从提示可以看出 进行了增强, 同时 打开对应的 .class 文件可以看出 也做了增强.
在这里插入图片描述

2.5 运行

成功进行拦截,在控制台 打印出了 相应的日志
在这里插入图片描述
有人可能调试 不成功, 这里把 true 改成 false ,这样 IDEA 就会用 Ajc 去编译, 而不是默认的javac , 也可以手动 调整, 具体在 :
在这里插入图片描述

三、涉及点

使用也比较简单, 但是里面有2点不太友好

3.1 includes 功能有缺陷

从官方文档 官方文档 ,进行测试,单纯的 include 某一个 aspect 是不生效的(exclude 是可以的),还需要具体指定 source 的地址, 即需要指定 使用的 地方,也就是 还要 配合 或者 标签使用, 个人感觉这个很不友好, 为啥不能使用默认的 basedir 呢

3.2 和 lombok 有冲突

如果你在编译的时候出现下面的信息, 那就是和lombok 冲突, 网上也有很多的做法啦,具体可以自行Googole,百度现在 搜的东西质量越来越差.
在这里插入图片描述

支付宝微信
支付宝微信
如果有帮助记得打赏哦特别需要您的打赏哦
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直打铁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值