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

Spring Boot中AspectJ Before/After切点不触发方法出入日志求助

问题根因及修复方案

1. 修复切面语法错误(直接导致启动失败)

你代码里@AfterThrowing注解的切点表达式多了1个多余的右括号,属于AspectJ语法错误,直接导致Spring上下文初始化失败,Tomcat无法启动:

// 错误写法,末尾多了一个)
@AfterThrowing("execution(* com.demo.*.*(..)))")
// 修正后写法
@AfterThrowing("execution(* com.demo.*.*(..))")

2. 修正切点表达式(解决切面不生效问题)

当前切点execution(* com.demo.*.*(..))仅匹配com.demo包下直接定义的类的方法,不会匹配controller、service等子包下的类,需要修改为匹配所有子孙包的写法:

// 修正后,com.demo后面加两个点,匹配当前包及所有子孙包下的所有类的所有方法
@Before("execution(* com.demo..*.*(..))")
@After("execution(* com.demo..*.*(..))")
@AfterThrowing("execution(* com.demo..*.*(..))")

如果要避免切到Spring自带的配置类,可以再缩小范围,比如只切controller和service包:execution(* com.demo.controller..*.*(..)) || execution(* com.demo.service..*.*(..))

3. 清理冗余依赖(避免版本冲突)

spring-boot-starter-aop已经内置了spring-aop、aspectjrt、aspectjweaver三个依赖,不需要单独手动引入,直接删除pom.xml中这三个单独的依赖即可,避免版本不一致导致的启动异常:

<!-- 只保留这一个依赖即可 -->
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

4. 调整注解配置(避免初始化顺序问题)

@EnableAspectJAutoProxy建议移到启动类Application.java上,不要放在切面类本身,避免切面类加载顺序异常导致代理不生效。

附加注意事项

如果打印的traceId为空,需要确认你已经在请求入口(比如全局过滤器、拦截器)中提前将traceId存入了MDC,且异步场景下需要单独处理MDC的上下文传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:36:05