前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringMVC源码解析之HandlerAdapter

SpringMVC源码解析之HandlerAdapter

作者头像
JavaEdge
发布2021-02-22 14:35:10
3190
发布2021-02-22 14:35:10
举报
文章被收录于专栏:JavaEdgeJavaEdge

HandlerAdapter,处理器适配器,Spring MVC通过HandlerAdapter来实际调用处理方法。 当HandlerMapping获取了处理器,DispatcherServlet会将得到的Handler告知HandlerAdapter,HandlerAdapter再根据请求去定位请求的具体处理方法是哪一个。

MVC框架SPI,核心MVC工作流程,允许参数。

接口,必须为每个处理程序类型来处理的请求来实现。 该接口用于允许DispatcherServlet是无限扩展。 在DispatcherServlet通过这个接口访问所有已安装的处理程序,这意味着它不包含特定的代码处理各种事务的类型。 需要注意的是处理程序的类型可以是的Object 。 这是为了让其他框架中的处理程序使用此框架结合,而不定制编码,以及允许那些不服从任何特定的Java接口注解驱动的处理程序对象。 此接口不用于应用程序开发。 它是提供给谁想要开发自己的Web工作流程处理程序。 注意: HandlerAdapter实现者可以实现org.springframework.core.Ordered接口能够指定用于通过得到施加的排列顺序(并且因此优先级) DispatcherServlet 。 无序情况下得到的待遇是最低的优先级。

流程

1.DispatcherServlte会根据配置文件信息注册HandlerAdapter,如果在配置文件中没有配置,那么 DispatcherServlte会获取HandlerAdapter的默认配置,如果是读取默认配置的话,DispatcherServlte会读取 DispatcherServlte.properties文件,该文件中配置了三种 HandlerAdapter:HttpRequestHandlerAdapter,SimpleControllerHandlerAdapter和 AnnotationMethodHandlerAdapter。DispatcherServlte会将这三个HandlerAdapter对象存储到 它的handlerAdapters这个集合属性中,这样就完成了HandlerAdapter的注册。

2.DispatcherServlte会根据handlerMapping传过来的controller与已经注册好了的HandlerAdapter 一一匹配,看哪一种HandlerAdapter是支持该controller类型的,如果找到了其中一种HandlerAdapter是支持传过来的 controller类型,那么该HandlerAdapter会调用自己的handle方法,handle方法运用Java的 反射机制执行controller的具体方法来获得ModelAndView,例如SimpleControllerHandlerAdapter是支持 实现了controller接口的控制器,如果自己写的控制器实现了controller接口,那么 SimpleControllerHandlerAdapter就会去执行自己写控制器中的具体方法来完成请求。

作用

  1. HandlerAdapter定义了如何处理请求的策略,通过请求url、请求Method和处理器的requestMapping定义,最终确定使用处理类的哪个方法来处理请求,并检查处理类相应处理方法的参数以及相关的Annotation配置,确定如何转换需要的参数传入调用方法,并最终调用返回ModelAndView。
  2. DispatcherServlet中根据HandlerMapping找到对应的handler method后,首先检查当前工程中注册的所有可用的handlerAdapter,根据handlerAdapter中的supports方法找到可以使用的handlerAdapter。
  3. 通过调用handlerAdapter中的handler方法来处理及准备handler method的参数及annotation(这就是spring mvc如何将request中的参数变成handle method中的输入参数的地方),最终调用实际的handler method。

总结

handlerAdapter这个类的作用就是接过handlermapping解析请求得到的handler对象。再更精确的定位到能够执行请求的方法。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 流程
  • 作用
  • 总结
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档