目录
AbstractDetectingUrlHandlerMapping类相关
2.2、determineUrlsForHandler()方法
前言:
我们在之前的博文SpringMVC源码分析之一AbstractHandlerMapping 中以AbstractHandlerMapping接口为主介绍了两大类型的AbstractUrlHandlerMapping返回类级别的Handler和AbstractHandlerMethodMapping返回method方法级别的Handler两大方面,但是根据前缀我们知道两个均为抽象类,下面我们针对AbstractUrlHandlerMapping其具体的子类实现进行介绍。本篇博文spring版本为5.2.7.RELEASE。
- AbstractUrlHandlerMapping体系概览
在重复一遍,见名知意,该类是一个基于url和Handler对象的抽象类,其对应的子类实现UML类图为
从UML类图中可以大概清楚,在其抽象类下有两个分支,SimpleUrlHandlerMapping、AbstractDetectingUrlHandlerMappin,同时该类下还有一个子类BeanNameUrlHandlerMapping。在前面的博文中我们知道AbstractUrlHandlerMapping类通过模板的方式实现了从请求request到Handler对象的主要逻辑,那么可想而知其后面的子类主要的功能点是初始化url和Handler的映射关系。
-
SimpleUrlHandlerMapping类
1、相关属性
当我们在前面分析了SimpleUrlHandlerMapping的继承类AbstractUrlHandlerMapping的相关代码后,那么该类的分析就会简单,主要做了初始化url和Handler的初始映射。通过其属性分析我们可以知道该类提供了相关的方式进行url和handler的映射关系。通过其构造器注入设置Map<String,Object) 的urlMap, 属性注入提供了Map<String,Object> urlMap和Properties的mappings,实例化SimpleHandlerMapping的有多种方式。
通过其相关属性的配置方式可以知道该类只有一个核心属性urlMap,用于存储url和handler的映射关系(Properties属性的mappings最终也是转换成urlMap属性)
2、核心方法
2.1、initApplicationContext()方法
该方法主要是初始化url和handler的映射关系,用于后续使用过程中的request请求映射。
因为该类间接实现了WebApplicationObjectSupport,所以该类重写了该方法。
public void initApplicationContext() throws BeansException {
//调用父类的initApplicationContext()方法,设置相关的拦截器
super.initApplicationContext();
//核心方法注册相关urlMap
registerHandlers(this.urlMap);
}
该方法很简单吗,主要的核心处理逻辑是放在registerHandlers()方法,下马我们研究一下该方法。
2.2、registerHandler()方法
/**
* 对应用系统设置的urlMap进行注册
* 注册的核心方法是调用其父类的registerHandler()
* 在注册的时候会对我们注册的url 进行简单处理
*/
protected void registerHandlers(Map<String, Object> urlMap