1、功能
在HandlerMapping返回处理请求的Controller实例后,需要一个帮助定位具体请求方法的处理类,这个类就是HandlerAdapter,HandlerAdapter是处理器适配器,Spring MVC通过HandlerAdapter来实际调用处理函数。
- Spring MVC自动注册的AnnotationMethodHandlerAdpater,HandlerAdapter定义了如何处理请求的策略
- 通过请求url、请求Method和处理器的requestMapping定义,
- 最终确定使用处理类的哪个方法来处理请求,并检查处理类相应处理方法的参数以及相关的Annotation配置
- 确定如何转换需要的参数传入调用方法,并最终调用返回ModelAndView。
DispatcherServlet中根据HandlerMapping找到对应的handler method后,首先检查当前工程中注册的所有可用的handlerAdapter,根据handlerAdapter中的supports方法找到可以使用的handlerAdapter。
通过调用handlerAdapter中的handler方法来处理及准备handler method的参数及annotation(这就是spring mvc如何将request中的参数变成handle method中的输入参数的地方),最终调用实际的handler method。
2、源码
public abstract interface HandlerAdapter
{
public abstract boolean supports(Object paramObject);
public abstract ModelAndView handle(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse, Object paramObject)
throws Exception;
public abstract long getLastModified(HttpServletRequest paramHttpServletRequest, Object paramObject);
}
该接口定义了三个方法:
-
supports
方法的作用是判断处理适配器是不是支持该Handler。 -
handle
方法,调用对应的Handler中适配到的方法,并返回一个ModelView。 -
getLastModified
方法不确定干嘛用的。