千家信息网

SpringMVC源码分析

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,Pogy原创,未经允许,请勿转载!!!springMVC是一个建立在spring框架基础之上的一个web层框架,它负责发送每个请求到合适的处理程序,使用视图来最终返回响应结果的概念。SpringMVC
千家信息网最后更新 2026年11月03日SpringMVC源码分析

Pogy原创,未经允许,请勿转载!!!

springMVC是一个建立在spring框架基础之上的一个web层框架,它负责发送每个请求到合适的处理程序,使用视图来最终返回响应结果的概念。

SpringMVC最重要的一个类是DispatchServlet这个类,当我们打开这个源码,感到一脸蒙蔽。但是坐下来冷静一下看看,发现,这个东西竟然继承了一些类

跟过去看看

好像也没啥线索,继续跟

这时有了重大发现,发现这个DispatchServlet终归结底还是继承了HttpServlet,那么我们就可以按照普通的servlet的生命周期来分析它了。

Servlet的生命周期大家都还记得吧,不记得没关系,我来简单列一下

1. 首先tomcat启动的时候会去查询web.xml中的配置文件找到servlet的配置,然后会通过new关键字创建这个servlet的实例。

2. 然后调用这个servlet的init方法去初始化,然后把这个servlet放入容器中管理,等待使用。

3. 当容器关闭时,tomcat会调用这个servlet的destroy方法来做一些善后工作。

Ok,下面我们就找init方法吧,看看这里面都干了些什么吧

这里面没有什么太复杂的逻辑,就是把配置DispatchServlet配置参数加载到内存中,以供spring使用。有的朋友就问了,什么参数

主要就是这里面调用了initServletBean方法,这个方法在这个类中是空的,而它的子类实现了它,springmvc中用了很多类似的设计模式,叫模板方法模式。简单讲就是在父类中写好,你要调用哪些方法,我在子类中去实现,这样就按照了父类的逻辑顺序调用了相应的方法,而且子类可以有不同的实现。

好,下面我么就找哪个子类实现了这个initServletBean方法吧,跟我走。。。

看看这个HttpServletBean的继承体系如下

先找FrameworkServlet

我们寻寻觅觅,果然没猜错,方法的实现,写在了子类,而且还不少,我来分析下吧

略过日志记录往下走

调用了当前类中写的一个方法initWebApplicationContext方法,这个方法就很重要了,坐下来,喝杯茶,慢慢品尝spring这道美味可口的大餐。

先把源码粘上来,


第一步spring通过工具类获取父级WebApplicationContext容器,有的朋友问了,这个父级容器哪来的,何时创建的。

就是在这个监听器运行的时候创建的,我们知道web服务器启动的时候,3大组件的创建顺序是Listener>Filter >Servlet。

所以这里是可以获取到父级容器的。当然也可以获取不到这种情况就不讨论了,因为,不可能说你用springMVC而不用spring框架的。

这里有几个if判断,我已经标号了,给大家分析一下执行流。

首先webApplicationContext一定是空的,为什么,因为你刚启动,肯定是空的。所以第一个if暂时不会执行。进入到第二个if了,这里调用了findWebApplicationContext,其实这里也会返回一个null,从这个findwebApplicationContext名称就知道,它只查找并不创建。把源码附上,大家看看

因此wac还是空的,所以进入第三个if语句,我们进到createWabApplicationContext方法中一探究竟。

这里的1号代码块中是日志,2号代码块中式判断的,3号代码块是创建一个可配置的web应用上下文,也就是web容器,4号代码块是初始化一下这个容器。比如设置之前的rootContext为父级容器。

最后把这个创建的容器返回,至此,我们的springMVC容器就这样诞生了。但是还没结束,在Framework的initWebApplicationContext()方法里还有if,我把它粘上来

接着之前的if序号编号

看看这个字段的初始值

所以这个onRefresh()方法是要执行的,跟进去发现空实现,意料之内的事啦,没关系的,模板方法模式嘛,找子类,有线索,

这个方法又调用了一个initStrategies(。。)方法,这个方法干了什么勾当 ,跟进去看看

这里我直接加上注释了

这里我就只跟一个进去看看吧,initMultipartResolver(context),进去看看

注意我画线的这个段代码,大家考虑有没有问题啊,仔细思考哦

当然有问题,我们又没有在容器中注入这个解析器,它怎么能get到呢,出鬼了。

嘻嘻

方法 容器 子类 代码 配置 就是 源码 分析 时候 框架 模式 重要 没关系 参数 周期 日志 朋友 模板 生命 线索 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网与科技 华服互联网科技怎么样 北京互联网科技有限公司 互联网科技ppt模板 科技互联网公司logo 联恩商钥互联网科技有限公司 太原新华互联网科技学校怎么样 中国最先进互联网科技公司 创业天下互联网科技有限公司 以后互联网后是啥科技 互联网大会黑科技排名 广州恒生互联网科技有限 互联网科技创新服务 互联网和黑科技的看法 爱医互联网络科技 元气玛特互联网科技公司是外包吗 每天都有哪些好的互联网科技 湖北辰鑫科技互联网 陕西九四连强互联网科技有限公司 互联网科技创业计划的风险分析 九亚互联网科技 互联网科技论文 居家互联网科技有限公司 金融科技和互联网金融 江苏南京365互联网科技 湖南诚度互联网科技有限公司 武汉健翔互联网络科技有限公司 互联网科技人工智能实验室 西安小鹰速贷互联网科技有限公司 上海科技产业互联网平台
0