Spring AOP:之后vs之后返回优先级

问题描述 投票:0回答:1

我已将此代码段编码:

@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
    }

}

我已经意识到flushaudit之前执行。

尽管我在@After之后执行了AfterReturning

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

spring spring-boot spring-aop
1个回答
0
投票

在文档中,关于这两个建议的优先顺序或执行顺序没有任何关系。实际上,不应该将它们用于屠夫,

AfterReturning应该在方法无例外返回时使用

AfterThrowing在方法抛出异常时应使用

After应该代替前两个,并且需要处理这两种情况。

因此,我建议您摆脱其中一个,并在其他代码之后在AfterReturning中使用flush调用,如果需要在异常情况下执行此操作,请使用@AfterThrowing调用同一方法添加其他建议。或仅使用@After并区分两种可能的情况

© www.soinside.com 2019 - 2024. All rights reserved.