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

Spring Boot整合AspectJ编译时织入调用aspectOf()报NoSuchMethodException求助

错误根本原因

你遇到的NoAspectBoundException伴生NoSuchMethodException: xxx.aspectOf()报错,核心原因是AspectJ编译时织入没有正常执行。aspectOf()是AspectJ编译器在编译切面类时自动注入的静态方法,没有这个方法说明你的LoggingInterceptorAspect类没有被AspectJ编译器正确处理。


排查与解决步骤

1. 切面类实例化逻辑修正

你当前的切面类用了带参构造方法加@Autowired注入依赖,而AspectJ默认的切面是单例,且编译时织入的切面实例默认不由Spring直接创建,写法存在冲突:
给LoggingInterceptorAspect类添加@Configurable、@Component注解,去掉自定义的带参构造,改为字段注入或者setter注入,让Spring可以管理AspectJ实例的依赖注入:

@Aspect
@Configurable
@Component
public class LoggingInterceptorAspect {
    @Autowired
    private LoggingService loggingService;
    // 保留无参构造
    // 原有切点、通知逻辑不变
}

同时在Spring Boot启动类上添加@EnableSpringConfigured注解开启对@Configurable的支持。

2. 确认编译触发逻辑

如果用IDEA等IDE开发,需要确认构建策略委托给Maven执行,不要用IDE自带的javac编译器,否则不会触发AspectJ织入:
IDEA路径:设置>构建,执行,部署>构建工具>Maven>运行器,勾选将IDE构建/运行操作委托给Maven。

3. AspectJ Maven插件配置补全

如果你的切面类放在src/main/java目录下(不是默认的src/main/aspect目录),需要在插件配置里显式指定切面源码目录:

<plugin>
    <groupId>com.nickwongdev</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.12.6</version>
    <configuration>
        <!-- 原有配置保留 -->
        <aspectDirectory>src/main/java</aspectDirectory>
    </configuration>
    <!-- 原有executions配置保留 -->
</plugin>

4. 依赖版本冲突修复

Spring Boot 2.5.3自带的AspectJ版本为1.9.7,你手动指定了1.9.5版本存在不兼容风险,直接去掉aspectjweaver和aspectjrt的手动版本号即可,由Spring Boot父依赖统一管理版本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:18:01