在Spring AOP中抛出异常

时间:2012-09-28 16:13:10

标签: spring aop spring-aop

每当我阅读官方的Spring AOP文档(link)时,我都会对使用RuntimeExceptions的建议行为感到困惑。有人会检查我的未成年人是否适合以下建议?

@Before

  • 建议抛出异常=目标(未执行)建议(已执行)
  • 目标抛出异常=目标(已执行)建议(已执行)

@AfterReturning接口

  • 建议抛出异常=目标(已执行)建议(已执行)
  • 目标抛出异常=目标(已执行)建议(未执行)

@AfterThrowing

  • 建议抛出异常=目标(已执行)建议(未执行)
  • 目标抛出异常=目标(已执行)建议(已执行)

@After

  • 建议抛出异常=目标(已执行)建议(已执行)
  • 目标抛出异常=目标(已执行)建议(已执行)

@Around

  • 建议抛出异常=目标(已执行)建议(已执行)
  • 目标抛出异常=目标(已执行)建议(执行至point.proceed())

1 个答案:

答案 0 :(得分:12)

这就是我通常看它的方式。

try {
    //@Before
    method();
    //@AfterReturning
} catch(Throwable t) {
    //@AfterThrowing
} finally {
    //@After
}

@Around是一种自己的野兽。由于您选择何时调用目标,因此您可以捕获任何Exception throwtry-catch-finally。因此,您可以轻松地将呼叫包裹在@Order中,并且可以访问前面提到的任何和所有连接点。

我假设当你说“已执行”时,你的意思是“被执行以至于抛出异常”。

另一件可能对您很重要的是@Order注释。较高值{{1}}首先出现在前侧,并且它们在后侧向后运行。将多个建议组合到同一目标时,请务必牢记这一点。