2012-04-24 90 views
0

我遇到問題。春季AOP異常多態性

即:我使用spring aop來處理異常。其中一些是我在外部供應商交付數據損壞時引發的異常。我在指向某種類型的方面處理它們。比如這個。

@AfterThrowing(
    pointcut = 
     "execution(*myClass.myDataProcessingMethod(..))", 
    throwing = "ex" 
) 
public void myAspectMethod(MyException ex) { 
... 
} 

但是當壞事happends在我的數據處理工作,而不是錯誤的數據,但在我的邏輯錯誤,我想在實例予以通報。所以我有第二個方面。

@AfterThrowing(
    pointcut = 
     "execution(*myClass.myDataProcessingMethod(..))", 
    throwing = "ex" 
) 
public void myAspectMethod(Exception ex) { 
    extraInformingService.informAdamAtOnce("shitjustgotreal"); 
} 

但是,當拋出MyException時,兩個方面都會被觸發,因爲MyException是Exception的實例。

有沒有辦法只觸發指向MyException的方法?

回答

1

最簡單的,儘管不是很優雅版是這樣的:

@AfterThrowing(
    pointcut = 
     "execution(*myClass.myDataProcessingMethod(..))", 
    throwing = "ex" 
) 
public void myAspectMethod(Exception ex) { 
    if(!ex instanceof Myexception){ 
     extraInformingService.informAdamAtOnce("shitjustgotreal"); 
    } 
} 
+0

是的,我想過這個問題,但由於存在大量的「我的」例外它將從「不太雅」長到不能接受的。無論如何:-) – 2012-04-24 17:25:16

+1

但是,也許如果我創建抽象類,將作爲所有「我」的異常繼承的基礎,它將只在一個if語句結束。謝謝^ 2:D – 2012-04-24 17:27:44