Spring之HandlerExceptionResolver異常處理器原理分析

編程語言 Java 工程師 數碼 編程界的小學生 編程界的小學生 2017-09-12

通常在項目中我們都會做統一的異常處理,那麼今天我們就來分析下自定義異常處理的原理。

若有不知道怎麼自定義統一的異常處理的,請看我的這篇文章:JavaWeb使用HandlerExceptionResolver統一異常處理

開始分析

1、請求接口,進入doDispatch方法

2、查看異常

Spring之HandlerExceptionResolver異常處理器原理分析

可以發現有四個異常處理器,其中第一個是我們的ExceptionResolver,第二三四個是spring內置的三個,order分別為0,1,2。若我們ExceptionResolver不加@Order(-1000),則我們的ExceptionResolver會默認排到最後。這樣一來,我們發生異常後就無法使用我們自定義的攔截器捕獲。而被Spring內置的捕獲到了。(除非內置的三個處理器無法捕獲我們的異常,這時候才會加載我們自定義的ExceptionResolver這個。),加上@Order(-1000),則可以保證我們的ExceptionResolver會在第一個被執行。

3、運行主程序

Spring之HandlerExceptionResolver異常處理器原理分析

doDispatch核心處理部分

handle這個方法是核心方法,會執行我們的主程序,若程序報錯,則會首先進入catch塊,然後會執行processDispatchResult方法。

Spring之HandlerExceptionResolver異常處理器原理分析

SpringMVC處理異常方法processDispatchResult

會進入else,執行processHandlerException

Spring之HandlerExceptionResolver異常處理器原理分析

異常內部解釋

會進入for循環,有我們自定義的異常處理類,還有三個Spring自帶的。由於我們的自定義的異常處理類Order最低,所以排到了第一位,那麼在執行handlerExceptionResolver.resolveException的時候會直接進入我們的異常處理類,而我們的異常處理類最後return new ModelAndView()了,所以直接break了,不會在執行其他三個內置的Spring異常處理類了。

若有興趣,歡迎來加入群,【Java初學者學習交流群】:458430385,此群有Java開發人員、UI設計人員和前端工程師。有問必答,共同探討學習,一起進步!

歡迎關注我的微信公眾號【Java碼農社區】,會定時推送各種乾貨(純乾貨的東西,並非Java基礎語法這些。)

Spring之HandlerExceptionResolver異常處理器原理分析

Java碼農社區

相關推薦

推薦中...