如果业务方法正在捕获未重新抛出的异常,那么是否会调用throw建议?
答案 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很好地集成,但首先需要执行一些核心步骤(编译 - 或加载时编织)。