首页 > 解决方案 > Spring AOP:After vs AfterReturning 优先级

问题描述

我已经编写了这个代码片段:

@Aspect
@Component
public class ApiAuditAspect {

    @Pointcut(value = "execution(* net.gencat.transversal.espaidoc.api.controller.RepositoryController.*(..))")
    public void anyRepositoryController() {
        // Nothing to do here
    }

    @AfterReturning(
        pointcut = "anyRepositoryController()",
        returning = "result")
    public void audit(JoinPoint point, Object result) throws Throwable {
        // audit actions
    }

    @After("anyRepositoryController()")
    public void flush() {
        // flush all audits
    }

}

我已经意识到flush是之前执行的audit

我虽然@After是在AfterReturning.

关于如何解决这个问题的任何想法?

标签: springspring-bootspring-aop

解决方案


从 Spring 5.2 开始。(2020 年 6 月 9 日发布)@After 建议方法在同一方面类中的任何 @AfterReturning 或 @AfterThrowing 建议方法之后调用

https://github.com/spring-projects/spring-framework/issues/25186


推荐阅读