总体流程大概是这样
1.首选有个统一处理请求的入口
(对应Springmvc 下的源码在DispatcherServlet 下实现的,该对象在初始化就会把映射器,适配器,试图解析器,异常处理器,文件处理器等等给初始化掉)
2.随后根据请求路径找到对应的映射器
(就是找到【最佳匹配的的】路径,具体方法是lookupHandlerMethod方法上)
3.找到处理请求的适配器
(获取到HanderExecutionChain后,就会去获得适配器,一般我们获取得到的就是RequestMapperingHandlerAdapter,在代码里,我们经常用到@ResponseBody 和@Requestbody 的解析器,就会在初始化的时候加到参数解析器Listz中,得到适配器之后,)
4.拦截器前置处理
(就会执行拦截器前置处理,拦截器前置处理完后,就会调用适配器对象实例的hanlde 方法执行真正的代码逻辑处理,核心的处理逻辑在invokAndHandle 方法中,会获取得到请求的参数并调用,处理返回值,参数的封装以及会处理被适配器的参数解析器进行处理,具体的处理逻辑取决于HttpMessageConverter的实例对象)
5.真实处理请求(也就是调用真正的代码)
6.试图解析器处理
关键信息:DispatcherServlet (入口)
DispatcherServlet.properties(会初始化对象)
HandlerMappering(映射器)
HandleExecutionChain(映射器最终实例+拦截器List)
HttpRequestHandlerAdater(适配器)
HttpMessageConverter(数据转化)