SpringMVC⼯作原理之参数解析
前⾯分析到 ,由映射处理器(HandlerMapping) 解析出对应的 handler。接着 描述了 handler 是怎么匹配到合适的适配器,进⾏handler 对应⽅法的执⾏。其他⼏种适配器还好,但是 RequestMappingHandlerAdapter 适配器对应接下来的参数解析及绑定并执⾏并不是那么简单,因此本篇笔记主要分析 RequestMappingHandlerAdapter 适配器解析对应 handler 的执⾏流程。
本篇笔记主要分析SpringMVC 5.1.1 这个版本。
SpringMVC运⾏流程
RequestMappingHandlerAdapter ⼤概解析流程如下
RequestMappingHandlerAdapter解析流程
1 了解在前⾯
在开始下⾯的具体源码分析前,我们需要了解⼀些相关的类和接⼝
1.1 HandlerMethod
在开始记录⽅法执⾏流程前,必须要先说下记录⽅法的对象 HandlerMethod,HandlerMethod 及⼦类主要⽤于封装⽅法调⽤相关信息。简
单理解为保持⽅法信息的 pojo 类。
HandlerMethod及其⼦类.png
分析下各个类的功能及职责:
HandlerMethod 封装⽅法定义相关的信息 (如类、⽅法、参数等)
InvocableHandlerMethod 参数准备委托 HandlerMethodArgumentResolver 进⾏具体的解析
ServletInvocableHandlerMethod 添加返回值处理职责,ResponseStatus 处理springmvc的注解有哪些
在容器初始化的时候,RequestMappingHandlerMapping 映射处理器就将 @RequestMapping 描述的⽅法以 RequestMappingInfo 为
key,HandlerMethod 为 value 放进⾃⼰的缓存 。⾄如 HandlerMethod 内部后⾯是怎么进⾏对应⽅法上的参数解析及绑定到后来的⽅法执
⾏等等,咱们接下来会详细讲解。
1.2 参数解析器(HandlerMethodArgumentResolver)和返回值的解析器(HandlerMethodReturnValueHandler)
在分析源码之前,⾸先让我们来看下SpringMVC中两个重要的接⼝,两个接⼝都是在 3.1 版本后添加的。
处理⽅法参数的解析器接⼝
处理⽅法调⽤返回值的解析器接⼝
两个接⼝分别有两个⽅法,⼀个⽤来查看该解析器是否⽀持该参数的解析,第⼆个⽅法⽤来对参数进⾏解析。
1.3 默认解析器的注⼊
在容器初始话的时候,初始化 RequestMappingHandlerAdapter 适配器的时候会将默认的参数解析器都注⼊进缓存中。
加载默认的参数解析器(ArgumentResolvers),绑定到 RequestMappingHandlerAdapter 适配器的 argumentResolvers 属性上。
加载默认的返回值解析器(ReturnValueHandlers),绑定到 RequestMappingHandlerAdapter 适配器的 returnValueHandlers 属性上。下⾯我们来简单的看下都有哪些默认解析器
默认注⼊的参数解析器
默认注⼊的返回值解析器
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论