Spring MVC 核心类: HandlerMapping(一)

Handler Mapping 是spring在通过http请求匹配对应处理的核心逻辑,今天在调查springboot错误码处理时又重新看了一下对应的实现,就重新温习一下对应的逻辑。

spring.png

1. 整体结构

1.1 HandlerMapping 接口

这个接口的实现用于映射 Http 请求和对应的处理实例。

系统开发者可以自己实现这个接口,当然并不是时时都需要这样,因为 Spring 框架已经提供了很多的默认实现帮助你解决问题,例如:BeanNameUrlHandlerMappingRequestMappingHandlerMapping。如果在应用中没有配置对应的 HandlerMapping 实例,前面两个也是对应的默认实现。

如果你需要的化,HandlerMapping 的实现可以支持对应的映射拦截器(interceptor)。同时一个具体的处理器通常被HandlerExecutionChain实例包装,可以选择的使用映射拦截器(HandlerInterceptor)来协同处理相关的业务。DispatcherServlet 会首先按照给定顺序进行调用 HandlerInterceptor 的 preHandle 方法,如果所有的 HandlerInterceptor 的
preHandle 方法都返回true, 再调用 Hander 自己。

在 Spring MVC 框架中,参数化映射是一个非常重要并且十分奏效的能力。例如,你很有可能使用 sesson 状态、cookie 状态或者其他变量来个性化定义一个自己的映射器。好像没有任何其他的 MVC 框架有如此的灵活性。

对应自己实现实例也可以实现 spring 中 Ordered 接口,以便指定对应的执行顺序。DispatcherServlet 在使用 Mapping 前会先排序(升序,数字越小越先执行)。 如果没有实现 Ordered 接口,被默认为最低优先级,即最后执行。

1.2 实现层次结构

Spring 框架已经对 HandlerMapping 做了丰富的扩展,整体结构图如下:

HandlerMapping.png

在接口层面,如果是想通过匹配的方式来定义映射,可以实现MatchableHandlerMapping。 在 MatchableHandlerMapping 中定义了match方法;

AbstractHandlerMapping是所有HandlerMapping实例的超类。提供了排序、默认Handler、Handler 拦截器功能,同时还包含了通过路径匹配的映射 Handler 拦截器。

下一篇继续:
Spring MVC 核心类: HandlerMapping(二)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容