SpringMVC-HandleMapping的初始化源码分析

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

关于SpringMvc的执行流程源码分析大家可以在掘金上找到相关的文章,这里我也就不再重复了。因为之前我也看过,但是其中一个点一直困扰着我,就是SpringMvc在处理请求的时候有一步是从HandleMapping中获取相对应的Handle。这时候问题来了,这个HandleMapping是怎么来的。也就是我们在浏览器输入要访问的路径就能执行对应的方法,这个源码是怎么实现的呢???之前我也试着debug跟着源码走了一遍,发现有一个方法

这个方法是在org.springframework.web.servlet.DispatcherServlet类中的,是不是很开心???想着只要跟着这个方法就可以得到我们想要的答案,最后是得到了我们想要的结果,但是,但是,但是 只是结果,这个过程依然不清楚,也有可能是我个人能力有限,分析不到位。后来我看到一篇文章,说相关的HandleMapping是从AbstractHandleMethodMapping这个类得到的。我就进去看了下

这个类实现了InitializingBean接口,实现了InitializingBean接口的类在初始化的时候都会执行它定义的方法

所以在AbstractHandlerMethodMapping类中肯定也有这个方法的实现

最后会执行initHandleMethod()方法。

这个方法有三步。

第一步:它的作用是获取容器中相关的所有的bean,如下图

第二步:因为我测试的时候只写了个TestController,所以我们这里主要是分析TestController这个类,我直接跳到解析这个类的步骤来了,可以看到beanType这个变量的值,也就是这个类的相关信息

第三步:

这里有个方法 this.isHandler(beanType);我们跟进去看看

看到这个Controller.class和RequestMapping.class是不是很熟悉???没错就是我们在类上使用的@Controller和@RequestMapping注解,也不难想到该方法的主要目的就是判断该类上是否有@Controller或者是@RequestMapping注解。如果有的话那么就会执行 this.detectHandlerMethods(beanName)方法了。

这里就截取了一部分的代码,首先看下第一步有二个值,handleType和userType,看下这个二个值是什么

其实就是TestController这个类的相关信息。重点看下第二步,查看该类的所有方,并且循环解析每个方法看下方法上是否有@RequestMapping注解。 我先放上我写的控制器的代码

接着看下第二步:查看该类的所有方法,并遍历解析,进一步解析是执行this.getMappingForMethod(),这个方法有二个参数,userType前面已经有了,现在看下这个method

其实就是我们在控制器中写的方法,继续跟进去

这里有二个变量 info 和 typeInfo我们先来看下这二个值是什么??

info变量:表示方法上的@RequestMapping注解的value值

typeInfo变量:表示方法上的@RequestMapping注解的value值

知道这二个值了现在也能 明白这个方法的作用,至于具体实现细节这里不讲了,感兴趣的话可以进入源码看下。然后最后返回 info 的值,可以看下

就是拼接好我们访问的路径。 到这里我们已经得到了我们想要的东西了,所以接下来就是将url跟method映射保存起来。我debug进入到了下图这个方法

这里有个put方法,里面传进去二个参数,看下二个参数是什么

就是我们访问的路径和对应要执行的方法。所以在springMvc的执行流程中从HandleMapping中获取对应的Handle,这个HandleMapping就是这样得到的。

使用 Cadence ams 仿真器 对 混合信号电路 进行仿真 文章目录Cadence 基于ams仿真器的混合信号电路仿真建立数字(Digital)模块建立 Analog - Digital 混合仿真原理图建立 Analog - Digital 混合仿真config文件配置混合信号电路仿真环境针对混合信号电路demo进行仿真 Cadence 基于ams仿真器的混合信号电路仿真 你好,这里是一篇关于使用 Cadence 软件通过 ams 仿真器对混合信号电路(D... 阅读详情

相关推荐

PostgreSQL14 离线安装全攻略:从下载到配置详解

本文详细介绍了PostgreSQL14在无网络环境下的离线安装全流程,涵盖RPM包与源码编译两种主流方法。文章重点解析了安装前的系统环境检查、依赖包准备、数据库初始化、远程访问配置以及安装后的关键检查与性能调优,旨在帮助运维和开发人员在离线服务器上高效、稳定地部署PostgreSQL14数据库。

p5l2m9n4o6q的博客 730

SpringMvc分析总结篇

自己写了SpringMvc源码分析也好长时间了,有点遗忘了 发现文章也慢慢变多,现在也是时候该整理下思路,分类下自己写过的一些文章,然后再顺便回顾回顾 应用部分 最小化配置 源码分析篇 Springmvc源码分析之整体结构分析 Springmvc源码分析之组件初始化部分 SpringMvc源码分析之9大组件 SpringMvc源码分析之RedirectView SpringMvc源码分析之View...

菜鸡旭旭 300

设备树实践:从零构建一个嵌入式板级的设备树描述

本文详细介绍了如何从零开始为嵌入式Linux系统构建设备树(Device Tree),以i.MX6ULL处理器为例,涵盖硬件分析、设备树语法、外设配置及调试技巧。通过实践指导,帮助开发者掌握设备树编写,实现硬件与软件的高效对接,提升嵌入式开发效率。

plum99的博客 307

springmvc组件HandleMapping源码分析-AbstractHandlerMapping

1.AbstractHandlerMapping继承图 2.概述 AbstractHandlerMapping继承了WebApplicationObjectSupport,会默认调用initApplicationContext方法,具体在ApplicationObjectSupport,这个类实现了ApplicationContextAware接口,web容器启动会自动调用setApplicationContext方法设置applicationContext,ApplicationObjectSup

qq_39482039的博客 300

多路输出电源的交叉调整率:从理论到无源优化实践

本文深入探讨了多路输出电源中的交叉调整率问题,分析了其物理根源及无源优化方法。通过漏感与耦合的理论分析,结合加权反馈、电感耦合等五种无源优化技术,帮助工程师有效解决交叉调整率挑战。文章还以TDK-Lambda CUT75系列为例,展示了优化技术的实际应用与效果。

weixin_26886855的博客 281

LAMMPS实战指南 - 从in文件到分子动力学模拟的完整流程解析

本文详细解析了LAMMPS分子动力学模拟的完整流程,从理解in文件的核心作用与基础结构开始,逐步指导如何创建模拟体系、选择势函数、进行能量最小化与初始化,并深入讲解了NVT/NPT系综弛豫与生产模拟的关键步骤。文章还提供了常见问题的避坑指南与实战技巧,帮助初学者快速掌握从编写in文件到成功运行模拟的全过程。

weixin_28365523的博客 399

springmvc组件HandleMapping源码分析-RequestMappingHandlerMapping

1.RequestMappingHandlerMapping继承图 2.概述 通过加controller注解或requestmapping的类来作为处理器,每次请求都会到加了requestmapping的方法 3.RequestMappingHandlerMapping源码翻译后的 https://blog.youkuaiyun.com/qq_39482039/article/details/119765441 4. ...

qq_39482039的博客 300

欧姆龙OMRON PLC之HostLink通讯协议(四)-FINS命令进阶应用与调试技巧

本文深入探讨欧姆龙OMRON PLC的HostLink通讯协议中FINS命令的进阶应用与调试技巧。文章聚焦实战排错,详细解析命令帧解剖、响应帧解读与网络抓包三大核心方法,并分享性能优化策略,如合并读写与异步设计。同时介绍了强制操作、多存储区访问等高级命令的应用场景,旨在帮助工程师高效解决现场通讯问题,提升系统稳定性与效率。

nept的博客 752

springmvc组件HandleMapping源码分析-AbstractHandlerMethodMapping

1.AbstractHandlerMethodMapping继承图 2.概述 AbstractHandlerMethodMapping继承了AbstractHandlerMapping,同时实现了InitializingBean接口,初始化时会调用afterPropertiesSet,同时重写了getHandlerInternal方法

qq_39482039的博客 357

神州路由器DHCPv6配置

神州路由器DHCPv6配置.。

weixin_41687096的博客 462

node运行项目-Network: unavailable-没有ip地址

vscode运行vue项目后发现Network: unavailable 是什么情况呢?可能有一下三种情况:1.多个网卡原因:打开网络共享中心,把多余的网络禁用掉,只留一个2.在中配置host及public3.系统环境变量问题。

JackieDYH的博客 7541

Spring-MVC 源码分析--DispatcherServlet 初始化

我们知道一个http 请求到达服务端后是通过DispatcherServlet 进行请求的分发,而分发的逻辑具体就是要找到这个请求合适的HandleMapping 来处理,那么HandleMapping 是什么,它是怎么根据请求路径判断 哪个HandleMapping 来处理请求呢,HandleMapping 分发请求后,怎么完成对方法参数的解析,又是如何将方法的返回值给封装成浏览器需要的对象?

拽着尾巴的鱼儿的博客 266

C#调用opencv的dll

opencv算法和界面配合,刚入职的时候尝试过,利用的MFC,调试起来很痛苦。 后来基本都没怎么用界面,DOS的黑窗口,opencv自带的显示界面及滑动条凑合着调试用。 最近有点时间,刚好双十一在一个视觉群里看到了一个讲C#调用opencv的dll的课程,鉴于群主也是那门课的讲师,在平时解答群员的问题的时候很细心,能力也很强,因此有了这篇文章。 根据相机不同动态调用相机默认的属性...

Learning by doing 2976

springmvc组件HandleMapping源码分析-BeanNameUrlHandlerMapping

1.BeanNameUrlHandlerMapping继承图 2.概述 请求会映射到id或别名以/开头的bean,

qq_39482039的博客 231

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

springmvc组件HandleMapping源码分析-AbstractDetectingUrlHandlerMapping

1.AbstractDetectingUrlHandlerMapping继承图 2.概述 获取容器所有进行url映射的bean 3.AbstractDetectingUrlHandlerMapping整个代码用工具翻译后的 https://blog.youkuaiyun.com/qq_39482039/article/details/119221041 4.覆盖了AbstractUrlHandlerMapping的initApplicationContext方法,注册在上下文中找到的所有处理程序 /

qq_39482039的博客 180

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SpringMVC之源码分析--HandlerMapping(一)

概述 在Spring MVC启动章节https://segmentfault.com/a/1190000014674239,介绍到了DispatcherServlet的onRefresh方法调用initStrategies方法,初始Spring MVC九大策略解析器,本章在此基础上分析初始化HandlerMapping组件过程,本系列文章...

weixin_33889665的博客 191

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

spring mvc工作原理浅析

这里写自定义目录标题spring mvc执行流程概括新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 sprin...

u014018804的博客 288

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 304

信创环境下PageOffice文档控件适配与实践

信创适配做到文档控件这一层,拼的已经不是"有没有国产版本",而是同一个功能在两类终端上是否真的等价。等价的标准很具体:同一次点击能得到同样的结果,同一份公文能得到同样的版式,同一个项目不需要维护两套代码。这背后是三件并不轻松的工作:服务端用一套接口同时支撑两类终端,客户端把两种系统与四种芯片的安装包分发清楚,文档内核层由产品侧跟着 WPS 的版本走。浏览器这一层的压力,则被收进了产品自己的窗口里——升级节奏由产品掌握,不再交给运气。

zi_wu_xian的专栏 333

第三篇 第 6 课

前置:第三篇第 1 课(stdx 引入),第二篇第 1 课(std.regex)。环境:仓颉 SDK 1.2.0。本文所有代码与输出均逐行实测。

weixin_41618057的博客 546

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 581

Java 集合容器高频面试题全解:HashMap 树化阈值、1.7 死循环与 ConcurrentHashMap 演进(2026 招聘 JD 真题复盘)

HashMap 树化阈值 8 的泊松分布依据、退化阈值 6 的防抖设计、JDK 1.7 头插成环死循环的排查与修复、1.8 尾插后为何仍线程不安全、ConcurrentHashMap 放弃分段锁的原因与 ForwardingNode 协作扩容、computeIfAbsent 死锁陷阱、大集合找重复的场景题选型,附三层追问链自测。题目来源为 38 期公开招聘 JD 样本与字节、拼多多、建行、美团、快手公开面经。

蒙眼过河 423

spdlog 同步日志库使用详解

spdlog是一个轻量级 C++ 日志库,支持同步日志、异步日志、多线程日志、日志文件轮转和自定义日志格式。对于嵌入式 Linux 应用开发,我建议先使用。它可以帮我们完成:日志级别过滤。时间戳和线程 ID 输出。日志格式化。终端和文件输出。多线程安全写入。日志文件按大小或时间轮转。我们不需要自己实现互斥锁、文件写入、日志格式化和轮转等底层功能。

zengjiajun2006的博客 1121

JavaSE通关手册:数据类型与变量

代码无需额外处理,编译时编译器自动完成转换。

xys_678的博客 232

Java 多态 学习笔记

多态是面向对象编程的重要特性,指同一操作作用于不同对象时产生不同行为。其核心在于“父类引用指向子类对象”,结合方法重写实现运行时动态绑定。多态使代码更灵活、可扩展,如用Person p = new Student();统一处理各类人员注册,无需修改调用逻辑。但多态无法直接调用子类特有方法,需通过instanceof判断并强制转换。编译时看左边(类型),运行时看右边(实际对象),实现解耦与维护便利。

AA_AA114514的博客 369

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 180
上一篇: 并发编程JUC--Semaphore源码解析
下一篇: 面试官:代码里System.out.println比较多,该怎么办?
加班不秃顶
博客等级 码龄7年 1822粉丝 599原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值