SpringMVC工作原理之适配器[HandlerAdapter]

前面说到 SpringMVC工作原理之处理映射[HandlerMapping] ,由映射处理器(HandlerMapping) 映射出对应的 handler,但是接下来的 handler 是怎么去解析,怎么去调用 handler 对应的视图方法,这个时候就需要用到 handler 的适配器。
本篇原理主要分析SpringMVC 5.1.1 这个版本。

SpringMVC工作原理之适配器[HandlerAdapter]_第1张图片
SpringMVC运行流程

不同的映射处理器(HandlerMapping) 映射出来的 handler 对象是不一样的,AbstractUrlHandlerMapping 映射器映射出来的是 handlerController 对象,AbstractHandlerMethodMapping 映射器映射出来的 handlerHandlerMethod 对象。由此我们猜想映射的处理器也应该有很多种,不同的映射由不同的适配器来负责解析。

1 HandlerAdapter 基础了解

1.1 首先我们来看下适配器 HandlerAdapter 接口内部的方法

SpringMVC工作原理之适配器[HandlerAdapter]_第2张图片

1.2 再来看下适配器 HandlerAdapter 接口的实现链

SpringMVC工作原理之适配器[HandlerAdapter]_第3张图片

1.3 适配器们的加载

首先我们来看下源码,容器初始化的时候会将注入到容器的适配器们加进缓存。

SpringMVC工作原理之适配器[HandlerAdapter]_第4张图片

首先扫描注入容器的适配器,这里需要注意下 会帮我们注入 RequestMappingHandlerAdapterHttpRequestHandlerAdapterSimpleControllerHandlerAdapter 这三个配置器,我们需要注意下不要手动重复注入。
当我们没有写 标签帮我们注入,也没有手动注入,从上面源码最后一步可以看到,容器在初始化的时候检测到会自动帮我们注入 RequestMappingHandlerAdapterHttpRequestHandlerAdapterSimpleControllerHandlerAdapter 这三个配置器。

2 HttpRequestHandlerAdapter

可以执行 HttpRequestHandler 类型的 handler,源码如下

SpringMVC工作原理之适配器[HandlerAdapter]_第5张图片

3 SimpleServletHandlerAdapter

可以执行 Servlet 类型的 handler,源码如下

SpringMVC工作原理之适配器[HandlerAdapter]_第6张图片

4 SimpleControllerHandlerAdapter

可以执行 Controller 类型的 handler,源码如下

SpringMVC工作原理之适配器[HandlerAdapter]_第7张图片

在前面 SpringMVC工作原理之处理映射[HandlerMapping] 笔记中使用 AbstractUrlHandlerMapping 的子类映射器最终返回的 handlerController 类型,当时定义的视图控制器都继承自 AbstractController,视图必须实现 handleRequestInternal(...) 方法。
AbstractController 内部源码如下

SpringMVC工作原理之适配器[HandlerAdapter]_第8张图片

从源码中可以看出 Controller 对象调用 handlerRequest(..) 方法最终经过处理后还是调用 handleRequestInternal (..) 方法。

5. AbstractHandlerMethodAdapter

在这里 AbstractHandlerMethodAdapter 只有一个实现子类就是 RequestMappingHandlerAdapter,首先我们来看下其内部是怎么来实现判断 supports(..) 是否支持该 handler 和接下来的 handler 解析方法 handle(..) 的,源码如下

SpringMVC工作原理之适配器[HandlerAdapter]_第9张图片

6. 总结

关于适配器的分类总结及适配,本篇笔记就记录到这里。前面讲到的几种适配器执行对应的 handler 都很简单,主要是 RequestMappingHandlerAdapter 适配器,该适配从上面可以看出,他内部解析来的详细解析可以参考我的下一篇文章 SpringMVC工作原理之参数解析

其他相关文章

SpringMVC入门笔记
SpringMVC工作原理之处理映射[HandlerMapping]
SpringMVC工作原理之适配器[HandlerAdapter]
SpringMVC工作原理之参数解析
SpringMVC之自定义参数解析
SpringMVC工作原理之视图解析及自定义
SpingMVC之标签

你可能感兴趣的:(SpringMVC工作原理之适配器[HandlerAdapter])