【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的 ...
随机推荐
- 转:builder模式分析
建造者模式 11.1 变化是永恒的 又是一个周三,快要下班了,老大突然拉住我,喜滋滋地告诉我:"牛叉公司很满意我们做的模型,又签订了一个合同,把奔驰.宝马的车辆模型都交给我们公司制 作了,不 ...
- PMP变更流程
变更流程:
- vue3官网介绍,安装,创建一个vue实例
前言:这一章主要是vue的介绍.安装.以及如何创建一个vue实例. 一.vue介绍 vue3中文官网:建议先自己看官网. https://v3.cn.vuejs.org/ vue是渐进式框架,渐进式指 ...
- 工作组规划器(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 好像前面每分配一次任务,都要打开一个对话框,有木有简单粗暴点的法子啊? 必须有啊! 视图里有一种[工作组规划器],想要粗暴 ...
- CF1104A Splitting into digits 题解
Content 给定一个数字 \(n\),试将这个数分成若干个数,使得这些数都相等,输出任意一个方案均可. 数据范围:\(1\leqslant n\leqslant 1000\). Solution ...
- Python3 day6面向对象
http://www.cnblogs.com/alex3714/articles/5188179.html ====================生活中==================== 世界 ...
- mysql数据库,当数据类型是float时,查询居然查询不出数据来
mysql数据库,当数据类型是float时,查询居然查询不出数据来,类似如下: 以后mysql数据库不用float类型,而double类型可以查得出来.
- centos使用shell脚本定时备份docker中的mysql数据库
shell脚本 #!/bin/bash #容器ID container_id="6b1faea2b4d7" #登录用户名 mysql_user="root" # ...
- Spring整合ActiveMQ,实现队列主题消息生产消费
1.引入依赖 pom.xml 1 <!-- activemq --> 2 <dependency> 3 <groupId>org.springframework&l ...
- win7(X64)+wdk7驱动环境搭建
!!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!! 作者:mohist ----- 蓝 屏 警 告 --- 加载驱动的操作请在虚拟机中完成, 可以有效避免物理机蓝 ...