🍃【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 方法操作。
版权声明: 本文为 InfoQ 作者【浩宇天尚】的原创文章。
原文链接:【http://xie.infoq.cn/article/f3e28830b9554794b62c92848】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论