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

Spring Boot AspectJ同切点多切面优先级设置:新切面异常如何被已有异常切面处理

问题解答

你需要将NewAspect的Order值设置为大于0即可满足需求。

原理说明

Spring AOP中多个匹配同一切点的切面执行顺序遵循以下规则:

  • @Order注解的值越小,切面优先级越高,执行时会处于更外层的调用链路
  • 整个调用链路类似栈结构:优先级高的切面先进入,后退出;优先级低的切面后进入,先退出
  • 异常会沿着调用链路从内向外抛出,只有外层切面的@AfterThrowing通知能捕获内层切面/目标方法抛出的异常

你现有的ExceptionAspect优先级为0,要让它能捕获NewAspect抛出的异常,就需要让ExceptionAspect处于外层,NewAspect处于内层,因此NewAspect的优先级要低于ExceptionAspect,也就是Order值大于0。

代码示例

@Aspect
@Order(1) // 只要数值大于0即可,值越大优先级越低
public class NewAspect {

    @Pointcut("within(com.mycom.service.impl..*)")
    public void applicationServicePointcut() {
    }

    // 示例使用@Before通知,你可以根据需求替换为其他类型通知
    @Before("applicationServicePointcut()")
    public void doBefore(JoinPoint joinPoint) {
        // 此处抛出的所有异常都会被外层的ExceptionAspect捕获处理
        // 你的业务逻辑
    }
}

注意事项

  • 如果NewAspect中使用@Around通知,不要手动捕获异常后不抛出,否则外层的ExceptionAspect无法接收到异常
  • NewAspect的Order值没有强制要求固定数值,只要大于0即可满足需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 07:36:03