在春天提出建议

时间:2011-04-17 09:57:31

标签: spring

如果业务方法正在捕获未重新抛出的异常,那么是否会调用throw建议?

2 个答案:

答案 0 :(得分:1)

如果建议适用于业务方法,则不会调用throw建议,因为它不会看到异常。

如果你想“拥有你的蛋糕(或例外)并吃掉它”将业务逻辑分离成另一种方法。 e.g。

public void myBusinessLogic()
{
  try
  {
     myBusinessLogicImpl();  
  }
  catch (BusinessLogicException ex)
  {
  }
}

然后,您可以向myBusinessLogicImpl()方法添加抛出建议,以及吞噬异常。

答案 1 :(得分:0)

如果使用Spring AOP(大多数情况),则不会调用aspect。基本上代码看起来像这样:

商业方法:

public void businessMethod() {
  try {
    doSomething();
  } catch(BusinessException e) {
    //handle and not rethrow
  }

方面:

try {
  businessMethod();
} catch(BusinessException e) {
  //Aspect advice
}

正如您所看到的那样,方面无法“看到”异常。如果你真的希望拦截BusinessException,即使它没有从businessMethod()中逃脱,纯粹的AspectJ而不是Spring AOP可能会成功。它与Spring很好地集成,但首先需要执行一些核心步骤(编译 - 加载时编织)。