首页 > 代码库 > SpringMVC源码分析(7)剖析HandlerAdapter
SpringMVC源码分析(7)剖析HandlerAdapter
SpringMVC中,和HandlerMapping一样重要的一个组件,就是HandlerAdapter。
如果说HandlerMapping是沟通请求和后端Controller的桥梁。HandlerAdapter则是负责具体处理请求核心工作了,另外一个处理请求的责任系列拦截器,前面已经说过了。
HandlerMapping和HandlerAdapter,看名字怎么都像弟兄俩。确实两者关系不一般,所有解析出的HandlerMapping,都统统适配一个合适的HandlerAdapter来负责具体处理事务。
类 | 作用 |
SimpleServletHandlerAdapter | 处理Servlet 接口 默认不激活 |
SimpleControllerHandlerAdapter | 处理 Controller接口 |
HttpRequestHandlerAdapter | 处理HttpRequestHandler 接口 |
AnnotationMethodHandlerAdapter | 处理 handler methods |
1.HandlerAdapter 初始时机
1.AnnotationDrivenBeanDefinitionParser.parse(),注册了AnnotationMethodHandlerAdapter;
2.AbstractHttpRequestHandlerBeanDefinitionParser.registerHandlerAdapterIfNecessary()注册了HttpRequestHandlerAdapter;
3.ViewControllerBeanDefinitionParser.registerHanderAdapter注册了
SimpleControllerHandlerAdapter;
4.ComplexWebApplicationContext.refresh()注册了SimpleServletHandlerAdapter,默认不激活。
总结:HandlerAdapter是在解析标签时已经初始化完毕了。
介绍完了Adapter是如何初始化,初始化到容器中。接下来可以讨论内部实现原理了。
2.HandlerAdapter 工作原理
2.1 接口
public interface HandlerAdapter { /** * 判断是否支持Handler */ boolean supports(Object handler); /** * Use the given handler to handle this request. * The workflow that is required may vary widely. * 使用Handler处理请求 */ ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception; /** * Same contract as for HttpServlet‘ */ long getLastModified(HttpServletRequest request, Object handler); }
2.2 AnnotationMethodHandlerAdapter介绍
AnnotationMethodHandlerAdapter是几个为数不多Handler中最重要的一个处理类。
通过它,可以将请求适配到匹配的某个Handler的具体方法上。
2.3 AnnotationMethodHandlerAdapter处理序列图
图画的感觉挺多,但总结起来,就做了两件事。
匹配寻找合适的方法
调用方法,构造mav视图
本文出自 “简单” 博客,请务必保留此出处http://dba10g.blog.51cto.com/764602/1879373
SpringMVC源码分析(7)剖析HandlerAdapter