原理 - Spring:(三)一次Spring请求

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/lidelin10/article/details/100033544

该文章展示了用debug获取的一个请求到来时的调用栈,解释了Spring请求-响应过程的主要类和方法

阅读源码,主要还是需要知道核心方法和调用逻辑,debug是了解一个方法调用时发生了什么的关键。下面我们通过debug了解Spring收到一个普通请求时的调用过程:

请求到来时的调用栈:

相关类及其核心方法:
DispatcherServlet.doDispatch
包含拦截器、Handler、视图渲染等活动调用逻辑

AbstractHandlerMethodAdapter.handle
主要进行handler(一般就是定义的Controller中的一个RequestMapping映射)方法调用

RequestMappingHandlerAdapter.handleInternal --> invokeHandlerMethod

ServletInvokableHandlerMethod.invokeAndHandler
包含请求处理方法调用和返回值的处理调用逻辑

InvocableHandlerMethod.invokeForRequest
进行映射方法参数的解析和映射方法调用的主要逻辑

HandlerMethodArgumentResolverComposite.resolveArgument
进行方法参数的解析
|
—RequestResponseBodyMethodProcessor.readWithMessageConverters
| 进行包含@RequestBody参数的类型转换
|
—AbstracrtNamedValueMethodArgumentResolver
| 进行@CookieValue、@RequestParam、@HttpHeader等注解的参数的解析
|
—RequestPartMethodArgumentResolver
对@RequestPart注解参数进行解析

处理返回值调用栈:

相关类和核心方法:

HandlerMethodReturnValueHandlerComposite.handleReturnValue

RequestResponseBodyMethodProcessor.handleReturnValue

AbstreactMessageConverterMethodProcessor.writeWithMessageConverters
对返回参数进行格式转换的主要逻辑,根据RequestMapping中设置的produces进行转换

总结一下这里主要涉及的处理类后缀以及意义:

Composite:设计模式 – 组合模式应用,主要把所有实现相同接口的类组合在一起,统一处理过程,这种类里主要包含对处理器的选择过程。比如HandlerMethodReturnValueHandlerComposite、HandlerMethodArgumentResolverComposite等。

HandlerExecutionChain:进行调用链的调用

HandlerAdapter:执行方法

MethodArgumentResolver:方法参数解析器。

MethodProcessor:对方法的返回值和入参进行处理。

MessageConverter:主要进行格式转换以及编码,比如json、xml等。

– 写于Evernote 2019/8/3 15:09

猜你喜欢

转载自blog.csdn.net/lidelin10/article/details/100033544