🍃【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方法操作。
相关文章
- 算法学习——递归之快速排序
- 算法学习——动态规划之点数值三角形的最小路径
- 算法学习——动态规划之装载问题
- Windows系统 应用或游戏 打开出现0xc000007b错误 解决方法
- 算法学习——回溯之伯努利装错信封问题
- 算法学习——递推之杨辉三角
- 算法学习——递推之水手分椰子
- 算法学习——递归之汉诺塔
- 算法学习——递归之阶乘
- 算法学习——递推之猴子吃桃
- 算法学习——贪心算法之币种统计
- 算法学习——贪心算法之取数游戏(显示两端数字)
- 算法学习——递推之摆动数列
- 算法学习——贪心算法之可拆背包
- Kotlin入门学习笔记
- 算法学习——贪心算法之删数字(求最小值)
- 算法学习——贪心算法之删数字(求最大值)
- Win10系统简单开启热点
- Win10系统给文件夹添加备注
- 算法学习——递推之猴子爬山