天天看點

SpringMVC源碼解析之HandlerInterceptor接口1 preHandle2 postHandle3 afterCompletion

接口給提供了3個方法:

1 preHandle

執行controller處理邏輯前執行,傳回值為boolean ,傳回值為true時接着執行postHandle和afterCompletion,如果我們傳回false則中斷執行

SpringMVC源碼解析之HandlerInterceptor接口1 preHandle2 postHandle3 afterCompletion

攔截處理程式的執行。 HandlerMapping确定的适當處理器對象後調用,但在HandlerAdapter調用處理器之前。

DispatcherServlet是在執行鍊中處理的handler,其中包括了任意數量的攔截器,處理器本身在鍊的末尾,即最後才處理 handler。 利用該方法,每個攔截器可以決定中止執行鍊,特别發送一個HTTP錯誤或寫入用戶端響應。

注:特殊注意事項适用于異步請求處理。 欲了解更多詳情,請參見AsyncHandlerInterceptor 。

參數

請求 - 目前的HTTP請求

響應 - 目前HTTP響應

處理器 - 處理器選擇來執行,類型和/或執行個體的評價

傳回:

true如果執行鍊應與下一個攔截器或處理程式本身進行。 否則,DispatcherServlet認為,這種攔截器已經處理了響應本身。

抛出

Exception -在錯誤的情況下

2 postHandle

在執行controller的處理後,在ModelAndView處理前執行

SpringMVC源碼解析之HandlerInterceptor接口1 preHandle2 postHandle3 afterCompletion

攔截處理程式的執行。 調用後的HandlerAdapter實際上調用的處理,但DispatcherServlet的呈現視圖之前。 可以公開額外的模型對象通過給定的ModelAndView中的視圖。

DispatcherServlet的在執行鍊流程處理程式,其中包括任何數量的攔截器的,與所述處理程式本身在末端。 利用這種方法,每個攔截器可以後處理的執行,在執行鍊的相反的順序得到應用。

處理器-處理器(或HandlerMethod即開始異步執行,類型和/或執行個體檢查)

ModelAndView的-在ModelAndView傳回的句柄(也可以是null )

3 afterCompletion

在DispatchServlet執行完ModelAndView之後執行

SpringMVC源碼解析之HandlerInterceptor接口1 preHandle2 postHandle3 afterCompletion

請求處理,即完成之後回調,呈現視圖後。 将在處理程式執行的任何結果調用,進而允許适當的資源清理。

注意:如果此攔截器的才會被調用preHandle方法已成功完成,傳回true !

如同postHandle方法,該方法将在以相反的順序鍊中的每個攔截器被調用,是以第一個攔截器将是最後被調用。

前 - 抛出異常的處理程式執行的,如果有的話

繼續閱讀