是否有可能有兩點建議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沒有它的更好的辦法?
我也是對我的轉換預期自定義異常檢查異常,然後捕獲運行時異常的包羅萬象的,這可能是一個解決方案。