阅读本文需要 3 分钟
tips:本文属于 Spring MVC 请求流程 - 基于源码解读 的小分支
前言
上一篇讲了 getHandler 获取执行链,执行链里包括当前请求URL对应的 handler 以及拦截器,本篇将针对 getHandlerAdapter 进行讲述
DEBUG
在 org.springframework.web.servlet.DispatcherServlet#getHandlerAdapter 处打断点,看到有3个处理器适配器

- HttpRequestHandlerAdapter:用于处理实现了 HttpRequestHandler 的 handler
- SimpleControllerHandlerAdapter:用于处理实现了 Controller 的 handler
- RequestMappingHandlerAdapter:用于处理实例为 HandlerMethod 的 handler
通过查看 suppoerts 方法,三个适配器的匹配逻辑都是根据 handler 是否为某个类的子类来判断



显然,getHandlerAdapter 的入参 handler,就是上一步 HandlerMethod 的实例,所以适配器是 RequestMappingHandlerAdapter
后记
通常,我们开发Spring MVC 的 Handler 基本上使用注解,所以处理器适配器都是走 RequestMappingHandlerAdapter。
当然, Spring MVC 的 Handler还有别的,比如HttpRequestHandler接口、实现Controller接口以及原生的Servlet,但用起来都不方便。
本文探讨SpringMVC中HandlerAdapter的角色,详细解析DispatcherServlet如何选择合适的处理器适配器。主要关注HttpRequestHandlerAdapter、SimpleControllerHandlerAdapter和RequestMappingHandlerAdapter的匹配逻辑,并指出在实际开发中,大部分情况使用RequestMappingHandlerAdapter处理注解驱动的Controller。
1119

被折叠的 条评论
为什么被折叠?



