2011-04-17 67 views

回答

1

如果建議適用於業務方法,則拋出通知不會被調用,因爲它不會看到異常。

如果你想「讓你的蛋糕(或例外)和吃它」分開業務邏輯到另一種方法。例如

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

然後,您可以添加異常通知到myBusinessLogicImpl()方法,以及吞嚥了異常。

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很好地集成,但需要執行一些核心步驟(編譯或加載時間編織)。

相關問題