SpringMVC源码分析之AbstractUrlHandlerMapping体系扩展

本文深入分析了SpringMVC中AbstractUrlHandlerMapping的子类,包括SimpleUrlHandlerMapping、AbstractDetectingUrlHandlerMapping及其子类BeanNameUrlHandlerMapping。详细探讨了各子类的核心属性和方法,如detectHandlers()和determineUrlsForHandler(),并给出了实例配置及测试情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言:

SimpleUrlHandlerMapping类

1、相关属性

2、核心方法

AbstractDetectingUrlHandlerMapping类相关

       1.相关属性

        2.核心方法

  2.1、detectHandlers()方法

  2.2、determineUrlsForHandler()方法

AbstractUrlHandlerMapping实例

1.公共方法

2.SimpleUrlHandlerMapping示例

3.BeanNameUrlHandlerMapping示例


前言:

   我们在之前的博文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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值