我已将此代码段编码:
@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
。
关于如何解决该问题的任何想法?
在文档中,关于这两个建议的优先顺序或执行顺序没有任何关系。实际上,不应该将它们用于屠夫,
AfterReturning应该在方法无例外返回时使用
AfterThrowing在方法抛出异常时应使用
After应该代替前两个,并且需要处理这两种情况。
因此,我建议您摆脱其中一个,并在其他代码之后在AfterReturning中使用flush调用,如果需要在异常情况下执行此操作,请使用@AfterThrowing调用同一方法添加其他建议。或仅使用@After并区分两种可能的情况