You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven项目中使用AspectJ注解:织入功能无法正常工作

解决非Spring项目中AspectJ织入失效的问题

嘿,我刚碰到和你一模一样的情况——在纯Java项目里用AspectJ,代码看着没问题就是织入不生效,折腾了好一阵才找到几个关键排查点,结合你的环境(Eclipse Oxygen 4.7.3、JDK7、Maven3.5.2,没装AJDT),给你列几个最可能的原因和解决办法:

先确认Maven插件的核心配置

你的pom.xml里必须正确配置aspectj-maven-plugin,这是Maven环境下实现编译期织入的关键。我猜你可能没把插件配置全,给你个标准的参考配置:

<dependencies>
    <!-- 引入AspectJ运行时依赖 -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.8.13</version> <!-- 这个版本完美兼容JDK7 -->
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.11</version>
            <configuration>
                <complianceLevel>1.7</complianceLevel> <!-- 匹配你的JDK7 -->
                <source>1.7</source>
                <target>1.7</target>
                <showWeaveInfo>true</showWeaveInfo> <!-- 开启织入日志,方便排查 -->
                <verbose>true</verbose>
                <Xlint>ignore</Xlint>
                <aspectLibraries>
                    <!-- 如果你的切面在自定义依赖里,这里要配置,否则不需要 -->
                </aspectLibraries>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal> <!-- 编译主代码时织入 -->
                        <goal>test-compile</goal> <!-- 测试代码织入 -->
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjtools</artifactId>
                    <version>1.8.13</version> <!-- 和aspectjrt版本保持一致 -->
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

几个容易踩的坑

  • 切面类的注解和切点别写错:切面类一定要加@Aspect注解,切点表达式的路径要精准,比如你要切com.example.service下的所有方法,得写execution(* com.example.service..*(..)),别漏了星号和括号。另外,切面类本身要被Maven编译到,别放在src/main/resources这种目录里。
  • 别依赖Eclipse自动编译:因为你没装AJDT,Eclipse自带的编译器不支持AspectJ织入,必须手动触发Maven构建——右键项目→Run As→Maven clean,再Run As→Maven install,看控制台输出里有没有织入相关的日志(比如Weaving into com.example.xxx.YourClass),如果有就说明织入成功了。
  • 版本兼容性要匹配:AspectJ 1.9+开始只支持JDK8及以上,你用JDK7必须用AspectJ 1.8.x系列,插件版本也要对应(比如aspectj-maven-plugin 1.11对应AspectJ 1.8.13),版本不匹配大概率会导致织入失败。
  • 检查编译后的class文件:去项目的target/classes目录下找到你的目标类,用反编译工具打开看看,里面有没有AspectJ插入的切面逻辑代码,如果有说明织入成功,只是你的切面逻辑有问题;如果没有,那就是织入过程没执行,回到插件配置排查。

最后验证一下

你可以在切面的通知方法里加个System.out.println("切面触发了!"),然后运行主方法,如果控制台能打印这句话,就说明织入生效了。

内容的提问来源于stack exchange,提问作者Rin Ori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:20:30