Spring 春天的忠告
如果业务方法正在捕获未重新抛出的异常,是否会调用抛出建议?如果该建议应用于业务方法,则不会调用抛出建议,因为它无法看到异常 如果您想“拥有蛋糕(或例外)并吃掉它”,请将业务逻辑分离到另一个方法中。e、 gSpring 春天的忠告,spring,Spring,如果业务方法正在捕获未重新抛出的异常,是否会调用抛出建议?如果该建议应用于业务方法,则不会调用抛出建议,因为它无法看到异常 如果您想“拥有蛋糕(或例外)并吃掉它”,请将业务逻辑分离到另一个方法中。e、 g public void myBusinessLogic() { try { myBusinessLogicImpl(); } catch (BusinessLogicException ex) { } } 然后,您可以向myBusinessLogicIm
public void myBusinessLogic()
{
try
{
myBusinessLogicImpl();
}
catch (BusinessLogicException ex)
{
}
}
然后,您可以向myBusinessLogicImpl()
方法添加抛出建议,并吞咽异常 如果使用SpringAOP(大多数情况下),将不会调用aspect。基本上,代码如下所示:
商业方法:
public void businessMethod() {
try {
doSomething();
} catch(BusinessException e) {
//handle and not rethrow
}
方面:
try {
businessMethod();
} catch(BusinessException e) {
//Aspect advice
}
正如您所看到的,aspect无法“看到”异常。如果您确实希望拦截BusinessException
,即使它没有从businessMethod()
中逃逸,纯AspectJ而不是Spring AOP可能会起到作用。它与Spring很好地集成,但是需要首先执行一些核心步骤(编译时或加载时编织)