通常在項目中我們都會做統一的異常處理,那麼今天我們就來分析下自定義異常處理的原理。
若有不知道怎麼自定義統一的異常處理的,請看我的這篇文章:JavaWeb使用HandlerExceptionResolver統一異常處理
開始分析
1、請求接口,進入doDispatch方法
2、查看異常
可以發現有四個異常處理器,其中第一個是我們的ExceptionResolver,第二三四個是spring內置的三個,order分別為0,1,2。若我們ExceptionResolver不加@Order(-1000),則我們的ExceptionResolver會默認排到最後。這樣一來,我們發生異常後就無法使用我們自定義的攔截器捕獲。而被Spring內置的捕獲到了。(除非內置的三個處理器無法捕獲我們的異常,這時候才會加載我們自定義的ExceptionResolver這個。),加上@Order(-1000),則可以保證我們的ExceptionResolver會在第一個被執行。
3、運行主程序
handle這個方法是核心方法,會執行我們的主程序,若程序報錯,則會首先進入catch塊,然後會執行processDispatchResult方法。
會進入else,執行processHandlerException
會進入for循環,有我們自定義的異常處理類,還有三個Spring自帶的。由於我們的自定義的異常處理類Order最低,所以排到了第一位,那麼在執行handlerExceptionResolver.resolveException的時候會直接進入我們的異常處理類,而我們的異常處理類最後return new ModelAndView()了,所以直接break了,不會在執行其他三個內置的Spring異常處理類了。
若有興趣,歡迎來加入群,【Java初學者學習交流群】:458430385,此群有Java開發人員、UI設計人員和前端工程師。有問必答,共同探討學習,一起進步!
歡迎關注我的微信公眾號【Java碼農社區】,會定時推送各種乾貨(純乾貨的東西,並非Java基礎語法這些。)