天天看點

基于spring注解AOP的異常處理

  項目剛剛開發的時候,并沒有做好充足的準備。開發到一定程度的時候才會想到還有一些問題沒有解決。就比如今天我要說的一個問題:異常的處理。寫程式的時候一般都會通過try...catch...finally對異常進行處理,但是我們真的能在寫程式的時候處理掉所有可能發生的異常嗎? 以及發生異常的時候執行什麼邏輯,傳回什麼提示資訊,跳轉到什麼頁面,這些都是要考慮到的。

  @ControllerAdvice注解内部使用@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法應用到所有的 @RequestMapping注解的方法。本例子中使用ExceptionHandler應用到所有@RequestMapping注解的方法,處理發生的異常。

  示例代碼:

  如果不起作用,請檢查 spring-mvc的配置檔案,是否有ControllerAdvice的如下配置

  1.處理controller層的異常 WebExceptionAspect.java

  2.處理service層的異常ServiceExceptionAspect .java

   3.使用方式,在spring的公共配置檔案中加入如下配置:

  或者 自定義一個 注冊類,ServiceExceptionAspect.java和WebExceptionAspect.java都加入@Component注解

   @within(org.springframework.stereotype.Service),攔截帶有 @Service 注解的類的所有方法

   @annotation(org.springframework.web.bind.annotation.RequestMapping),攔截帶有@RquestMapping的注解方法

  分别編寫controller層和service層的異常測試類。這個很簡單,在方法裡簡單的抛一下異常就可以了。最後驗證一下,異常發生的時候有沒有 執行 @AfterThrowing對應的方法就好了。具體還是看我寫的demo吧,嘿嘿嘿!!!