为什么@AfterReturning只在@AfterThrowing异常后执行?

时间:2010-11-29 14:28:03

标签: java spring aop aspectj

我有以下内容:

@AfterReturning("executionOfTrustedAnnotatedMethod()")
public void afterReturningFromTrustedMethodExecution() { ... }

@AfterThrowing(pointcut = "executionOfTrustedAnnotatedMethod()")
public void afterThrowingByExecutionOfTrustedAnnotatedMethod() { ... }

我观察到这种对我没有意义的行为:

  • 如果此切入点捕获的方法没有抛出异常,则执行@AfterReturning
  • 如果方法抛出异常,@ AfterReturning仅在@AfterThrowing存在且先执行时执行

我想要完成的是在方法执行结束时运行一些代码,无论是否抛出异常。但是现在这个代码运行了两次(如果我同时有afterReturning和afterThrowing)或根本没有(如果我只有afterReturning),如果抛出异常。

有什么建议吗?

谢谢, 彼得

1 个答案:

答案 0 :(得分:6)

如果您想在方法之后执行代码,无论是否抛出异常,您都需要使用@After