SpringMVC中HandlerMapping的初始化和一次请求的完调用过程

Springmvc中HandlerMapping的初始化和一次请求的完调用过程

    • HandlerMapping的初始化
    • 一个请求的过程

这里先放一张HandlerMapping的类图
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第1张图片

HandlerMapping的初始化

关于HandlerMapping的使用,主要包括两个部分:注册和查找

( HandlerMapping有多种实现 容器启动的时候有多个被注册会根据Order顺序加载或调用 此处以RequestMappingHandlerMapping为例)
正常启动一个springboot应用

ApplicationObjectSupport实现了ApplicationContextAware接口,则在容器启动的时候也就applyBeanPostProcessorsBeforeInitialization时回调 调用初始化方法之前
1 ApplicationObjectSupport.setApplicationContext
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第2张图片
initApplicationContext交给子类重写SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第3张图片
2.1.1 extendInterceptors(this.interceptors);默认是空方法,用来给子类扩展拦截器
2.1.2 detectMappedInterceptors(this.adaptedInterceptors);用来探测
2.1.3 initInterceptors();初始化拦截器,将handlermapping中定义的interceptors包装成HandlerInterceptor对象保存在adaptedInterceptors数组中。
2.1.3.1(TODO 拦截器作用) 默认拦截器图如下在这里插入图片描述
AbstractHandlerMethodMapping实现了InitializingBean方法 前置处理器结束调用后调用初始化方法
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第4张图片
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第5张图片
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第6张图片
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第7张图片
下面获取Method方法在封装HandlerMethod集合,遍历添加到MappingRegistry中
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第8张图片
注册单个MappingRegistry
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第9张图片
至此RequestMappingHandlerMaping初始化完成

一个请求的过程

1.HandlerMapping的匹配
2.HandlerAdapter的匹配
3.获取ArgumentResolver进行解析参数
4.反射调用方法
5.遍历ReturnValueHandler进行返回包装

1.请求来到DispatcherServlet
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第10张图片
来到方法内部
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第11张图片
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第12张图片
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第13张图片

SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第14张图片
下面从mappingRegistry中获取RequestMappingInfo完成校验(Consume product Hander等值的校验)后返回HandlerMethod
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第15张图片
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第16张图片
下图将HandlerMethod和初始化时候的HandlerInterceptor构造成HandlerExecutionChain对象返回
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第17张图片
至此 getHandler(processedRequest);获取完毕,进入MethodAdapter的获取
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第18张图片
下图返回HandlerAdapter
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第19张图片
下图通过HandlerAdapter处理请求
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第20张图片
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第21张图片
下图来到RequestMappingHandlerAdapter的invokeHandlerMethod方法
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第22张图片

SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第23张图片
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第24张图片
至此响应到此结束
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程_第25张图片

你可能感兴趣的:(SpringMVC中HandlerMapping的初始化和一次请求的完调用过程)