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

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

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

HandlerMapping的初始化

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

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

ApplicationObjectSupport实现了ApplicationContextAware接口,则在容器启动的时候也就applyBeanPostProcessorsBeforeInitialization时回调 调用初始化方法之前
1 ApplicationObjectSupport.setApplicationContext
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程
initApplicationContext交给子类重写SpringMVC中HandlerMapping的初始化和一次请求的完调用过程
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 拦截器作用) 默认拦截器图如下SpringMVC中HandlerMapping的初始化和一次请求的完调用过程
AbstractHandlerMethodMapping实现了InitializingBean方法 前置处理器结束调用后调用初始化方法
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程
下面获取Method方法在封装HandlerMethod集合,遍历添加到MappingRegistry中
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程
注册单个MappingRegistry
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程
至此RequestMappingHandlerMaping初始化完成

一个请求的过程

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

1.请求来到DispatcherServlet
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程
来到方法内部
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程

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

SpringMVC中HandlerMapping的初始化和一次请求的完调用过程
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程
至此响应到此结束
SpringMVC中HandlerMapping的初始化和一次请求的完调用过程