写点什么

🍃【Spring 专题】「原理系列」SpringMVC 的运行工作原理(补充修订)

作者:浩宇天尚
  • 2021 年 12 月 25 日
  • 本文字数:1255 字

    阅读完需:约 4 分钟

🍃【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 方法操作。

发布于: 3 小时前
用户头像

浩宇天尚

关注

🏆 InfoQ写作平台-签约作者 🏆 2020.03.25 加入

【个人简介】酷爱计算机技术、醉心开发编程、喜爱健身运动、热衷悬疑推理的”极客狂人“ 【技术格言】任何足够先进的技术都与魔法无异 【技术范畴】Java领域、Spring生态、MySQL专项、APM专题及微服务/分布式体系等

评论

发布
暂无评论
🍃【Spring专题】「原理系列」SpringMVC的运行工作原理(补充修订)