2010-12-09 39 views
0

是否有可能有兩點建議AfterThrows件被應用到由特定異常類型限制了相同的切入點,其中一個例外是其他的與一個超類,在子類被捕獲的情況下,只有一個建議被執行?春天,看點Ĵ,多發性AfterThrowing建議應用到相同的切入點

我想翻譯運行時例外情況(包括自定義和標準java)都被抽出服務層,我在某些情況下做了一些特定的翻譯,然後有一個全面的翻譯建議來翻譯任何真正意外:

 
@AfterThrowing(pointcut = "execution(* com.my.company.api.*(..))", throwing = "rnfex") 
public void doTranslationAction(ResourceNotFoundException rnfex) { 
    // throw new WebApplicationException with Status.NOT_FOUND; 
} 

@AfterThrowing(pointcut = "execution(* com.my.company.api.*(..))", throwing = "aex") 
public void doTranslationAction(AuthorisationException aex) { 
    // throw new WebApplicationException with Status.NOT_AUTHORISED; 
} 

@AfterThrowing(pointcut = "execution(* com.my.company.api.*(..))", throwing = "throwable") 
public void doTranslationAction(Throwable throwable) { 
    // Log something here about this unexpected exception 
    // throw new WebApplicationException with Status.INTERNAL_SERVER_ERROR 
} 

我發現,在這種情況下,如果我把它明確地照顧那麼正確的方法被調用的異常,解譯的異常被拋出,通過更廣泛的「Throwable的,然後將其抓獲'的意見,然後再次翻譯成全能的INTERNAL_SERVER_ERROR WAE。這並不出乎意料,但不是我所期待的。

爲了解決這個問題,我得到了一個單獨的建議,它捕獲所有Throwable類型,然後使用'instanceof'來決定這是否是我可以翻譯成特定WAE的預期自定義運行時異常。

如果我曾經看到「的instanceof」我敢肯定,我已經做了什麼見不得人的,但我不知道是否有解決這一problemette沒有它的更好的辦法?

我也是對我的轉換預期自定義異常檢查異常,然後捕獲運行時異常的包羅萬象的,這可能是一個解決方案。

回答

0

我前一段時間寫了一個類似的方面,我結束了使用「實例」。我認爲這沒有問題。

0

我不是很確定......但只是想知道是否你最後一個(第三)建議可以在下面的時尚

execution(* com.my.company.api..*(..)) and !execution(* com.my.company.api.XyzAspect..*(..)) 
public void doTranslationAction(Throwable throwable) { 
    // Log something here about this unexpected exception 
    // throw new WebApplicationException with Status.INTERNAL_SERVER_ERROR 
} 

其中XyzAspect.java就是在你正在寫的@Aspect類編寫這3條建議。

相關問題