程序园Java Blog

SpringMVC【三】HandlerAdapter

2019-04-29  本文已影响0人  爪哇部落格

\color{red}{码字不易,欢迎大家转载,烦请注明出处;谢谢配合}

我们之前针对DispatcherServlet,HandlerMapping做了介绍,本文将介绍HandlerAdapter;我们先看看HandlerAdapter具体定义了哪些接口?

HandlerAdapter

HandlerAdapter

通过接口我们知道HandlerAdapter具体的功能包括校验(supports)、实例处理(handle)、以及获取lastModified;那么我们紧接着看看子类是如何实现这些功能的,以下是HandlerAdapter的继承实现结构。

HandlerAdapter继承结构

我们依次来了解每个HandlerAdapter的具体实现。

HttpRequestHandlerAdapter

HttpRequestHandlerAdapter

1.HttpRequestHandlerAdapter支持handler对象为HttpRequestHandler类型
2.调用HttpRequestHandler.handleRequest()处理业务逻辑
3.当实现LastModified接口时则支持lastModified

SimpleServletHandlerAdapter

SimpleServletHandlerAdapter

1.SimpleServletHandlerAdapter支持handler对象为Servlet类型
2.调用Servlet.service()处理业务逻辑
3.不支持LastModified

SimpleControllerHandlerAdapter

SimpleControllerHandlerAdapter

1.SimpleControllerHandlerAdapter支持handler对象为Controller类型
2.调用Controller.handleRequest()处理业务逻辑
3.当实现LastModified接口时则支持lastModified
注意:这里的Controller并非@Controller注解,而是 org.springframework.web.servlet.mvc.Controller 接口,并且该接口定义了handleRequest方法。

AbstractHandlerMethodAdapter

以上HandlerAdapter实现比较简单,我们就不做过多的描述;而AbstractHandlerMethodAdapter以及其子类RequestMappingHandlerAdapter实现比较复杂,并且最为常用;我们一起来看看

AbstractHandlerMethodAdapter

1.AbstractHandlerMethodAdapter 主要限制了Handler对象需要是HandlerMethod实例
2.定义了抽象方法supportsInternal,handleInternal,getLastModifiedInternal由子类实现

RequestMappingHandlerAdapter

RequestMappingHandlerAdapter invokeHandlerMethod

RequestMappingHandlerAdapter实现了父类AbstractHandlerMethodAdapter定义的抽象方法,对于supportsInternal,getLastModifiedInternal实现比较清晰,我们不做过多说明,对于handleInternal实现比较复杂,我们展开来说。

HandlerMethod继承关系

1.首先根据request,response构建ServletWebRequest实例
2.构建HandlerMethod的子类InvocableHandlerMethod
3.设置参数处理器,返回值处理等
4.创建ModelAndView容器
5.调用invocableMethod.invokeAndHandle方法,该方法由InvocableHandlerMethod实现,其本质是通过反射的方式调用原方法。

明确“三剑客”的关系

通过上篇SpringMVC【二】HandlerMapping,以及以上HandlerAdapter的介绍,我们一起梳理一下HandlerMappingHandlerAdapterHandlerExecutionChain 三者之间的关系。

HandlerMapping
HandlerMapping是一个接口,主要的作用是getHandler,返回HandlerExecutionChain对象;同时其实现类也包含了如何包装HandlerExecutionChain对象,以及注册Handler的过程。

HandlerExecutionChain
HandlerExecutionChain是一个类,它的成员变量包括interceptors以及以及具体的Handler 对象,Handler对象的类型没有限制是Object

HandlerAdapter
HandlerAdapter也是一个接口,支持传入Handler Object判断是否支持,执行Handler对象的处理逻辑等功能;其中Handler是HandlerExecutionChain的成员变量Object Handler。

总结

1.了解HandlerAdapter支持的Handler对象
2.清楚HandlerAdapter是如何调用handle方法处理业务逻辑
3.明白各种HandlerAdapter使用的场景
4.理清楚HandlerAdapter、HandlerMapping以及HandlerExecutionChain三者之间的关系

上一篇 下一篇

猜你喜欢

热点阅读