HandlerAdapter
Spring MVC HandlerAdapter 详解:处理器适配器的原理与实战
HandlerAdapter(处理器适配器)是 Spring MVC 中连接 DispatcherServlet 与 Handler(处理器,如 Controller) 的关键组件。由于 Spring MVC 支持多种 Handler 实现方式(如实现 Controller 接口、HttpRequestHandler 接口、注解驱动的 @Controller 方法),DispatcherServlet 无法直接调用不同类型的 Handler,需通过 HandlerAdapter 进行 “适配”——将统一的调用逻辑转换为具体 Handler 的执行方式,彻底解耦前端控制器与处理器。从 “核心定义→适配器模式→实现类解析→核心流程源码” 四个维度,彻底讲透 HandlerAdapter 的工作机制。
HandlerAdapter 核心定义与设计思想
1. 核心接口与方法
HandlerAdapter 接口定义了所有适配器的通用行为,共 3 个核心方法,覆盖 “适配判断→执行逻辑→资源时间戳” 三大功能:
public interface HandlerAdapter {
/**
* 1. 判断当前适配器是否支持指定的 Handler
* @param handler 待适配的处理器(如 Controller 实例、HandlerMethod)
* @return true:支持,可执行;false:不支持
*/
boolean supports(Object handler);
/**
* 2. 执行 Handler 的核心逻辑,返回 ModelAndView(无视图则返回 null)
* @param request HTTP 请求对象
* @param response HTTP 响应对象
* @param handler 待执行的处理器
* @return ModelAndView:封装模型数据与视图名;null:无需视图渲染(如 @ResponseBody 接口)
*/
ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
/**
* 3. 获取 Handler 对应资源的最后修改时间(用于缓存控制,如 Last-Modified 请求头)
* @return 时间戳(毫秒);-1:不支持缓存控制
*/
long getLastModified(HttpServletRequest request, Object handler);
}
2. 设计思想:适配器模式
HandlerAdapter 是 适配器模式 的典型应用,核心目标是 “将不同类型的 Handler 统一适配为 DispatcherServlet 可调用的接口”。
