spring boot中扩展spring mvc 源码分析
首先,确认你是对spring boot的自动配置相关机制是有了解的,如果不了解请看我spring boot相关的源码分析。
通常的使用方法是继承自org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter,然后重写
org.springframework.web.servlet.config.annotation.WebMvcConfigurer.addInterceptors(InterceptorRegistry)等方法。
spring mvc的自动配置类是org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration
里面有内部类org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter供扩展继承。
以及org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration.EnableWebMvcConfiguration对应的启用webMvc,同@EnableWebMvc注解功能相同。
父类org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration的setConfigurers方法加了@Autowired注解,会自动将容器中实现了org.springframework.web.servlet.config.annotation.WebMvcConfigurer接口的bean注入进来。上面的WebMvcAutoConfigurationAdapter就是实现了WebMvcConfigurer这个接口,
所以我们扩展时的子类都会被注册进DelegatingWebMvcConfiguration。这个里面的addInterceptors代理了刚刚所有注册进来的WebMvcAutoConfigurationAdapter子类。
那么,什么时候调用addInterceptors呢?答案就是DelegatingWebMvcConfiguration的父类WebMvcConfigurationSupport的getInterceptors中调用了addInterceptors,如下图所示:

那么又是哪里需要获取这些拦截器呢?如下图所示,在WebMvcConfigurationSupport中定义了很多HandlerMapping的实现bean,熟悉spring mvc的人应该很清楚,一个请求上来经过spirng mvc的时候,正是这些HandlerMapping处理的前端请求。

spring mvc的入口在org.springframework.web.servlet.DispatcherServlet.doService(HttpServletRequest, HttpServletResponse),里面调用doDispatch做分发处理,方法如下,其中的getHandler就是根据HttpServletRequest获取对应的执行类:


getHandler中的this.handlerMappings是哪里来的?如下图,当然是从容器中拿的啦:

至此,相关代码都串起来喽。
spring boot中扩展spring mvc 源码分析的更多相关文章
- Spring Boot REST(二)源码分析
Spring Boot REST(二)源码分析 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) SpringBoot RE ...
- Spring Boot Dubbo 应用启停源码分析
作者:张乎兴 来源:Dubbo官方博客 背景介绍 Dubbo Spring Boot 工程致力于简化 Dubbo | grep tid | grep -v "daemon" tid ...
- 涨姿势:Spring Boot 2.x 启动全过程源码分析
目录 SpringApplication 实例 run 方法运行过程 总结 上篇<Spring Boot 2.x 启动全过程源码分析(一)入口类剖析>我们分析了 Spring Boot 入 ...
- Spring Boot 2.x 启动全过程源码分析
Spring Boot 2.x 启动全过程源码分析 SpringApplication 实例 run 方法运行过程 上面分析了 SpringApplication 实例对象构造方法初始化过程,下面继续 ...
- Spring Boot 2.x 启动全过程源码分析(上)入口类剖析
Spring Boot 的应用教程我们已经分享过很多了,今天来通过源码来分析下它的启动过程,探究下 Spring Boot 为什么这么简便的奥秘. 本篇基于 Spring Boot 2.0.3 版本进 ...
- 精尽Spring MVC源码分析 - 寻找遗失的 web.xml
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- 精尽Spring MVC源码分析 - MultipartResolver 组件
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- 精尽Spring MVC源码分析 - WebApplicationContext 容器的初始化
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- 精尽Spring MVC源码分析 - HandlerExceptionResolver 组件
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
随机推荐
- [转]工作量证明(PoW)权益证明(PoS)和委任权益证明(DPoS)区别
原文链接 Both in the glossary and in some of our previous posts we've touched on mining and the two main ...
- mysql事务管理及spring声明式事务中主动异常抛出使数据库回滚
mysql的引擎常用的有两个,一个MyISAM,另一个是InnoDB,mysql默认的为MyISAM,而InnoDB才是支持事务的.所以一般需要修改下,如何修改就不说了. 事务需要依赖数据库,好久没使 ...
- pip 换源
pip 换源 pip国内的一些镜像 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.ed ...
- SUDO_EDITOR
目录 SUDO_EDITOR 参考 SUDO_EDITOR SUDO_EDITOR
- Python中的浅复制、深复制
参考 https://docs.python.org/3/library/copy.html?highlight=copy%20copy#copy.copy https://en.wikipedia. ...
- 基于soa的架构
SOA:Service Oriented Architecture面向服务的架构.也就是把工程拆分成服务层.表现层两个工程.服务层中包含业务逻辑,只需要对外提供服务即可.表现层只需要处理和页面的交互, ...
- 关于archive(feature)
配置如下archive命令,可以记录登录到设备,具体配置了哪些命令: R3(config)#archiveR3(config-archive)#log configR3(config-archive- ...
- LeetCode 234. Palindrome Linked List(判断是否为回文链表)
题意:判断是否为回文链表,要求时间复杂度O(n),空间复杂度O(1). 分析: (1)利用快慢指针找到链表的中心 (2)进行步骤(1)的过程中,对前半部分链表进行反转 (3)如果链表长是偶数,首先比较 ...
- Update(Stage4):Spark Streaming原理_运行过程_高级特性
Spark Streaming 导读 介绍 入门 原理 操作 Table of Contents 1. Spark Streaming 介绍 2. Spark Streaming 入门 2. 原理 3 ...
- Python 爬取 热词并进行分类数据分析-[拓扑数据]
日期:2020.01.29 博客期:137 星期三 [本博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)] 所有相关跳转: a.[简单准备] b.[云图制作+数据导入] c.[拓扑 ...