Spring源码-Springmvc初始化handlerMapping

本文详细介绍了Spring MVC中HandlerMapping的初始化过程,包括在DispatcherServlet的refresh方法后处理URL和handler映射关系的步骤。当bean创建完成后,会触发ContextRefreshContext事件,DispatcherServlet在initStrategies方法内初始化handlerMapping。如果未配置handlerMapping,系统将从DispatcherServlet.properties文件加载默认实现。BeanNameUrlHandlerMapping和RequestMappingHandlerMapping分别通过不同的方式处理映射关系。总结来说,HandlerMapping的初始化与URL映射是Spring MVC处理请求的关键环节。

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


前言

发生在refresh方法的最后一步,发布上下文刷新事件的时候触发
1、创建XmlWebApplicationContext
2、调用refresh()方法
3、bean都创建完成后发布上下文刷新事件,开始初始化handlerMapping


一、springmvc初始化handlerMapping时序图

在这里插入图片描述


二、handlerMapping什么时候处理url和handler映射关系的?

首先在FrameworkServlet里初始化XmlWebApplicationContext实例,并会添加一个ContextRefreshContext事件到容器,在bean都创建完成后,上下文发布ContextRefreshContext事件,DispatcherServlet最终在initStrategies方法里初始化handlerMapping,如果容器中没有相应的handler实例,则获取默认handler实例并注入容器,默认handler创建如下:

在dispatcherServlet.properties文件里配置了handlerMapping的3个实现类全路径,然后使用applicationContext创建这三个类,其中有一个类BeanNameUrlHandlerMapping间接实现了ApplicationContextAware接口,在这个接口的setApplicationContext方法里最终执行的BeanNameUrlHandlerMapping的determineUrlsForHandler方法处理映射关系

另一个RequestMappingHandlerMapping在afterPropertersSet方法里初始化handlerMethod

1、扫描所有bean

2、判断类是否有@Controller或者@RequestMapping注解

3、生成HandlerMethod

AbstractHandlerMethodMapping实现了InitializingBean,在afterPropertiesSet()方法里,去发现controller的方法,并注册到自己的handlerMethods(LinkedHashMap)里面

总结

1、如果不配置handlerMapping实现类,那么会从DispatcherServlet.properties配置文件读取3个handlerMapping,并使用放入spring容器,在spring创建完bean后的回调接口里,开始解析url和handler映射
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值