🍃【Spring專題】「原理系列」SpringMVC的運行工作原理(補充修訂)

承接相關之前的SpringMVC的框架技術的流程分析

初始化流程(initStrategies)

執行流程

尋找相關HandlerMapping

請求到DispatcherServlet類進行執行相關的HandlerMapping集合,找到對應類型的HandlerMapping對象的實現類,如果是一般的採用註解(@RequestMapping)注入的實現類(RequestMappingHandlerMapping)類,

HandlerMapping實現類之RequestMappingHandlerMapping對象

找出Spring容器中被@Controller/@RestController註解修飾的bean以及被@RequestMapping註解修飾的類和方法。

HandlerMapping屬性的HandlerMethod對象

HandlerMethod是Method以及Parameter的helper class。在HandlerMapping中被構造,
並在HandlerAdapter中被使用。

HandlerExecutionChain對象

當獲取到對應的HandlerMapping對象的實現類後,接下來返回到DispatcherServlet類對象,需要構建或者獲取相關的HandlerExecutionChain對象,內部包含了很多額外組件,例如:interceptor攔截器。

HandlerAdapter對象

根據HandlerExecutionChain中的Handler,在對應的HandlerAdapter集合找到支持此Handler的HandlerAdapter,調用相關的HandlerMethod對象方法,使用HandlerAdapter得到ModelAndView對象返回到DispatcherServlet。

RequestMappingHandlerAdapter

找到的對應的RequestMapping的HandlerAdapter對象的實現類RequestMappingHandlerAdapter對象操作處理。

HandlerInterceptor攔截器
  • 前置攔截器:HandlerInterceptor-preHandle
  • 後置攔截器:HandlerInterceptor-postHandle
HandlerExceptionResolver異常處理

上面的操作處理方式可能會發生異常,使用HandlerExceptionResolver策略解決。

RequestMappingHandlerAdapter的處理操作

  • HandlerMethodArgumentResolverComposite:該對象處理和包含了內部多個HandlerMethodArgumentResolver集合。
    • HandlerMethodArgumentResolver:解析相關的方法入口參數的解析機制!
  • HandlerMethodReturnValueHandlerComposite:該對象處理和包含了內部多個的HandlerMethodReturnValueHandler集合。
    • HandlerMethodReturnValueHandler:該對象處理和操作方法的返回值

HandlerMethodArgumentResolver參數入口的解析器

RequestParamMethodArgumentResolver

處理@RequestParam註解修飾的參數:HandlerMethodArgumentResolver的實現類之一:RequestParamMethodArgumentResolver

RequestResponseBodyMethodProcessor

處理@RequestBody註解修飾的參數:HandlerMethodArgumentResolver的實現類

HandlerMethodReturnValueHandler參數返回操作解析器

RequestResponseBodyMethodProcessor

處理@ResponseBody註解修飾的返回值:HandlerMethodReturnValueHandler的實現類

ModelAndViewMethodReturnValueHandler

處理返回值類型爲ModelAndView對象返回值:HandlerMethodReturnValueHandler的實現類

ViewResolver視圖解析器

將ModelAndView的對象數據與數據頁面模板進行解析處理操作ViewResolver對象,生成相關的View對象。並且返回相關的response:freemarker, jsp. json, xml等。

HandlerInterceptor的收官處理

最終完成攔截器:afterCompletion方法操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章