SpringMVC 九大组件之 HandlerMapping 深入分析
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
松哥最近完成了一个关于Spring Boot的视频教程,该教程涉及Spring Boot, Vue和微人事,并且适用于对SpringMVC中的九大核心组件不熟悉的同学。这些组件包括HandlerMapping, HandlerAdapter, HandlerExceptionResolver, ViewResolver, RequestToViewNameTranslator, LocaleResolver, ThemeResolver, MultipartResolver, 和FlashMapManager。有兴趣学习的同学可以回复ssm获取入门视频教程。
本系列文章旨在深入分析这九大组件的用法和源码,首先关注的是HandlerMapping组件。HandlerMapping负责根据请求找到对应的处理器(Handler)和拦截器(Interceptor),并将它们封装成HandlerExecutionChain对象。该组件的主要接口如下:
public interface HandlerMapping { // 省略常量声明 @Nullable HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception; }
HandlerMapping有两大类实现:AbstractHandlerMethodMapping和AbstractUrlHandlerMapping,它们共同继承自AbstractHandlerMapping。AbstractHandlerMethodMapping用于方法名匹配,而AbstractUrlHandlerMapping用于URL路径匹配。
AbstractHandlerMapping实现了HandlerMapping接口,并提供了公共的处理逻辑,将特定的处理逻辑留给子类通过模板方法模式实现。它的初始化方法initApplicationContext包含三个关键的拦截器处理方法:extendInterceptors(一个空的模板方法),detectMappedInterceptors(查找并添加MappedInterceptor类型的Bean到mappedInterceptors列表),以及initInterceptors(初始化拦截器列表)。
想要了解更多内容?