【Spring专场】「MVC容器」不看源码就带你认识核心流程以及运作原理
前提回顾
之前已经写了很多问斩针对于SpringMVC的的执行原理和核心流程,在此再进行冗余介绍就没有任何意义了,所以我们主要考虑的就是针对于SpringMVC还没但大框架有介绍的相关内容解析分析和说明,那么接下来就让我们来接入Spring框架在核心的三大框架之一。
DispatcherServlet的族谱
核心类的继承关系

核心的主要角色
XXAware的接通
主要用于BeanPostProcessor进行相关的获取系统内部的相关的XX组件功能的实现机制,通过实现该实现类的接口后,就可以非常方便向spring框架索取一些框架信息。
EnvironmentCapable
可以通过该类接口实现机制,进行获取相关的环境变量对象。
HtpServeltBean
是HttpServlet抽象的简单实现接口,以及对于相关的功能的进行一步执行扩展
FrameworkServlet执行类
主要是Spring web框架的一个基础父类,他会在dispatcherServlet创建之前创建一个父容器和自容器之间的关系。
DispatcherServlet实现类
主要是Spring web框架的,也是之前我们文章介绍的核心机制执行流程,它主要用于协调SpringMVC的整体运作流程和执行流程,初始化各个组件机制,比如:HandlerMapping组件、HandlerAdapter组件和HandlerExecuteChain。
借用一个网图(懒得自己在进行画了)

容器的创建过程
主要在Spring框架和MVC框架领域里面主要分为两种类型的容器:我们将他们定义为:业务容器和web容器。
容器会先进性建立业务容器(也可以说是父容器机制),再进行建立web容器(子容器),在初始化web容器的时候,会将父容器绑定到子容器中,作为其父容器。
父容器的初始化入口
主要依靠我们系统内部的ContextLoaderListener的contextInitialized方法,当ServletContext类被加载后,监听的contextInitailized方法就会被servlet容器进行调用。
父容器的创建流程
contextIntialized方法被调用之后,会进行创建createWebApplicationContext方法,调用内部的determineContextClass方法,进行判断初始化容器的类型,默认为XmlWebApplicationContext对象类。主要采用instantiateClass方法进行反射生成对应的容器对象。
此外对于SprringBoot以及其他类型的容器而言更多可能会选择ConfigureAndRefreshWebApplicationContext或者AnnotationConfigApplicationContext类,前者更多会进行刷新容器实现和使用,后者主要以JavaConfig的方式进行构建spring容器组件。
最后将生产的父子容器对象设置和注入到相关的ServletContext容器的全局上下文区。
子容器的初始化入口
HttpServletBean核心类覆盖了httpServlet类的init的方法,这个就是创建web容器的入口。
- HttpServletBean的init方法的调用
- 会调用相关的nitFrameworkServlet方法
- 会调用FrameworkServlet内的initServletBean方法。
子容器的初始化流程
- servletContext的容器获取ContextServletListener中的创建的容器对象
- 如果this.WebApplicationContext 不是空,进设置配置相关的父容器和刷新容器。
- 创建完对应的web容器之后,将上面的容器作为该容器的父容器,将rootContext作为父容器,并且同样进行设置绑定到对应的ServletContext容器中。
【Spring专场】「MVC容器」不看源码就带你认识核心流程以及运作原理的更多相关文章
- 【Spring专场】「IOC容器」不看源码就带你认识核心流程以及运作原理
这是史上最全面的Spring的核心流程以及运作原理的分析指南 [Spring核心专题]「IOC容器篇」不看繁琐的源码就带你浏览Spring的核心流程以及运作原理 [Spring核心专题]「AOP容器篇 ...
- 【Spring专场】「AOP容器」不看源码就带你认识核心流程以及运作原理
前提回顾 前一篇文章主要介绍了spring核心特性机制的IOC容器机制和核心运作原理,接下来我们去介绍另外一个较为核心的功能,那就是AOP容器机制,主要负责承接前一篇代理模式机制中动态代理:JDKPr ...
- 如何让 Spring Security 「少管闲事」
记两种让 Spring Security「少管闲事」的方法. 遇到问题 一个应用对外提供 Rest 接口,接口的访问认证通过 Spring Security OAuth2 控制,token 形式为 J ...
- spring MVC cors跨域实现源码解析
# spring MVC cors跨域实现源码解析 > 名词解释:跨域资源共享(Cross-Origin Resource Sharing) 简单说就是只要协议.IP.http方法任意一个不同就 ...
- spring MVC cors跨域实现源码解析 CorsConfiguration UrlBasedCorsConfigurationSource
spring MVC cors跨域实现源码解析 spring MVC cors跨域实现源码解析 名词解释:跨域资源共享(Cross-Origin Resource Sharing) 简单说就是只要协议 ...
- 专治不会看源码的毛病--spring源码解析AOP篇
昨天有个大牛说我啰嗦,眼光比较细碎,看不到重点.太他爷爷的有道理了!要说看人品,还是女孩子强一些.原来记得看到一个男孩子的抱怨,说怎么两人刚刚开始在一起,女孩子在心里就已经和他过完了一辈子.哥哥们,不 ...
- Spring AOP源码解析——专治你不会看源码的坏毛病!
昨天有个大牛说我啰嗦,眼光比较细碎,看不到重点.太他爷爷的有道理了!要说看人品,还是女孩子强一些. 原来记得看到一个男孩子的抱怨,说怎么两人刚刚开始在一起,女孩子在心里就已经和他过完了一辈子.哥哥们, ...
- Spring Boot启动命令参数详解及源码分析
使用过Spring Boot,我们都知道通过java -jar可以快速启动Spring Boot项目.同时,也可以通过在执行jar -jar时传递参数来进行配置.本文带大家系统的了解一下Spring ...
- Spring Cloud系列(四):Eureka源码解析之客户端
一.自动装配 1.根据自动装配原理(详见:Spring Boot系列(二):Spring Boot自动装配原理解析),找到spring-cloud-netflix-eureka-client.jar的 ...
随机推荐
- CF1070K Video Posts 题解
Content 有 \(n\) 个数 \(a_1,a_2,a_3,...,a_n\),要求分成 \(k\) 段,每一段的数的总和相等.输出这些段的长度,或者不可能满足要求. 数据范围:\(1\leqs ...
- 『学了就忘』Linux系统定时任务 — 88、循环执行定时任务
目录 1.crond服务管理与访问控制 2.crontab命令的访问控制 3.用户级别的crontab命令 4.crontab命令的注意事项 5.系统的crontab设置 (1)/etc/cronta ...
- Python第三周 函数详解
def 函数名(): """注释说明"""" 执行逻辑体 return 返回值 定义不带参数的函数 带参数的函数 默认参数 这个是 ...
- Vue3 全家桶,从 0 到 1 实战项目,新手有福了
前端发展百花放,一技未熟百技出.未知何处去下手,关注小编胜百书. 我是前端人,专注分享前端内容! 本篇文章主要是,使用 vite 创建一个vue3 项目,实践 vie-router4 vuex4 结合 ...
- svn服务器用户名密码更改后,如何更新本地用户名密码
在提交时,IDE会给出这样的提示,说明用户名密码已更改 在命令行输入 svn ls https:XXX(项目的地址),具体步骤如下图
- C语言补漏-逗号运算符与逗号表达式
1. 新名词? 今天看到一个新名词: 逗号表达式. C语言就有.额,怎么当时学习C没见过,一头雾水. 对我来说是新名词,其实它早就存在了,只是我还不知道. 2. 逗号表达式 C语言提供了逗号运算符-- ...
- 【LeetCode】1001. Grid Illumination 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 哈希 日期 题目地址:https://leetcod ...
- 【LeetCode】856. Score of Parentheses 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 栈 递归 计数 日期 题目地址:https://le ...
- 【剑指Offer】不用加减乘除做加法 解题报告(Java)
[剑指Offer]不用加减乘除做加法 解题报告(Java) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...
- python-mysql-replication原理分析
源码地址:https://github.com/noplay/python-mysql-replication 文件解析: ├── binlogstream.py ├── bitmap.py ├── ...