SpringMVC源码阅读系列汇总

简介: SpringMVC源码阅读系列汇总 1.前言 1.1 导入 SpringMVC是基于Servlet和Spring框架设计的Web框架,做JavaWeb的同学应该都知道 本文基于Spring4.3.7源码分析,(不要被图片欺骗了,手动滑稽),Spring官网告诉我们,Spring可以构建基于JVM的Servlet程序。

SpringMVC源码阅读系列汇总

1.前言

1.1 导入

SpringMVC是基于Servlet和Spring框架设计的Web框架,做JavaWeb的同学应该都知道

本文基于Spring4.3.7源码分析,(不要被图片欺骗了,手动滑稽),Spring官网告诉我们,Spring可以构建基于JVM的Servlet程序。Spring初代版本在2003年由Rod Johnson所写

以下摘自维基百科

The Spring Framework is an application framework and inversion of control container for the Java platform. The framework's core features can be used by any Java application, but there are extensions for building web applications on top of the Java EE (Enterprise Edition) platform. Although the framework does not impose any specific programming model, it has become popular in the Java community as an addition to, or even replacement for the Enterprise JavaBeans (EJB) model. The Spring Framework is open source.

1.2 版本历史

Version Date Notes
0.9 2002  
1.0 2003  
2.0 2006  
3.0 2009  
4.0 2013  
5.0 2017  

1.3 杂谈

2019年1月的某一天,我遇到了不能转换Json和Xml的情况,百度了很久,都说Jar包版本不对,照网上说得改不行呢,在StackOverflow尬聊也没有解决问题。后来我想到前公司的架构,发QQ问他,他半小时就给我解决方案,说把<mvc:annotation-driven/>启动,注释掉自己注入的Bean。或者手动注入MappingJackson2HttpMessageConverter和Jaxb2RootElementHttpMessageConverter。当时我听到这些是懵圈的,没有读过源码的我瑟瑟发抖,我问他怎么找到的,他发给我截图,讲在ReqeustMappingHandlerAdapter的afterPropertiesSet里发现了我的MessageConverters少了解析Xml和Json的核心类,顿时我恍然大悟,原来从源码层面调试发现症结所在的效率这么高。楼主想到自己看了些所谓的教学视频,学习着所谓的新技术,却不晓其理,甚是懊悔,从那时起,我决定开始读SpringMVC源码,第一篇文章在2019年1月22日完成,持续更新,SpringMVC源码阅读系列并未完结。

 

Spring4.3在2016年1月10日发布,官方提供更新支持到2020年,它快走到了尽头,但是没关系,国内有大把的人再用Spring4,短期内不会过时,现在甚至还有人用Spring3呢。

我没有选择阅读Spring5的原因如下:

  1. 前公司用的SpringBoot1.3.2+Spring4.2.4+JDK8,现在公司用的是Spring4.0.2+JDK7,基于对工作帮助比较大我选择了稳定版Spring4.3.7阅读。Spring5引用了大量特性,社区资料较少,且Spring5框架基于JDK8,就是说,大量特性我无法使用,如果有时间,以后我会阅读Spring5.x。
  2. Spring4.3.7功能完备,是个开源宝库,虽然版本不是最新,但是足以领略SpringMVC的所有风采。
  3. 这位博主的博客对我影响很大,推测他在大四的时候写出此文,后生佩服!他阅读的是Spring4.0.2源码,我搜索了下互联网,Spring4.3.7目前没有人去阅读并总结,那么就交给我来吧!Spring4.3.7相比Spring4.0.2引入了诸多新特性,如核心容器、数据访问和缓存等的改进。
  4. 本博客特点是由果到因,根据官方文档的提示,先从表象分析,从外向里,通过断点调试,找到源头所在。总结部分再在从里向外梳理,理清逻辑。我觉得这样更符合人的思考方式。我建议读者多打断点调试,学而不思则罔。

2.正文

2.1 文章推荐阅读顺序

SpringMVC源码阅读入门

有SpringMVC基础的可以直接忽略不看。小白可以看看,该文不仅介绍了简单的SpringMVC demo如何搭建,也交代了阅读源码的技巧

这个SpringMVC demo是一个增删改查demo,持久层使用Hibernate,配置力图最简。读者别看它是个简单的demo,麻雀虽小,五脏俱全,后续文章的内容都是基于该demo分析

 

SpringMVC源码阅读:核心分发器DispatcherServlet

解读SpringMVC的核心类,SpringMVC所有的逻辑都离不开它

 

SpringMVC源码阅读:定位Controller

解读SpringMVC如何找到我们定义的Controller和Controller中的方法,比如路径是如何映射的,弄清楚Controller是如何匹配我们传入的参数,并定义简单的参数解析器

 

SpringMVC源码阅读:Controller中参数解析

解读Controller方法中的参数解析和参数解析类

 

SpringMVC源码阅读:Json,Xml自动转换

解读SpringMVC的Json和Xml的转换原理

 

SpringMVC源码阅读:属性编辑器、数据绑定

解读SpringMVC数据绑定机制和属性编辑器,介绍BeanWrapper,并自定义属性编辑器

 

SpringMVC源码阅读:拦截器

解读SpringMVC拦截器的工作原理并自定义拦截器

 

SpringMVC源码阅读:过滤器

解读SpringMVC过滤器的工作原理,并自定义过滤器,让你弄清楚过滤器和拦截器的区别

 

SpringMVC源码阅读:视图解析器

即使前后端分离大行其道,视图解析器作为Spring源码的一部分,我们还是要研读。该文解读SpringMVC如何完成视图解析,提供Freemarker和Jsp的共存方案

 

SpringMVC源码阅读:异常解析器

解读SpringMVC如何完成异常解析、捕捉异常,并自定义异常和异常解析器

 

2.2 SpringMVC流程图

博主根据打断点调试画得流程图,用Xmind画图

 

3.参考

https://docs.spring.io/spring/docs/4.3.7.RELEASE/spring-framework-reference/htmlsingle/#beans-beans-conversion

相关文章
|
2月前
|
Java 应用服务中间件 Spring
Spring5源码(50)-SpringMVC源码阅读环境搭建
Spring5源码(50)-SpringMVC源码阅读环境搭建
40 0
|
XML 缓存 JSON
Spring MVC 阅读官方文档知识点总结
Spring MVC 阅读官方文档知识点总结
133 8
|
存储 XML JSON
SpringMVC官方文档阅读
SpringMVC官方文档阅读
388 0
|
Web App开发 前端开发 Java
SpringMVC源码阅读:过滤器
SpringMVC源码阅读:过滤器 目录 1.前言 2.源码分析 3.自定义过滤器 3.1 自定义过滤器继承OncePerRequestFilter 3.2 自定义过滤器实现Filter接口 4.
1768 0
|
监控 应用服务中间件
springMVC源代码阅读之servlet部分<一>servlet部分详解
【一】servlet的概念 【二】一个简单的servlet演示 第一部分:web.xml的配置 sxfServlet com.yeepay.nobank.sxfservlet.
976 0
|
4月前
|
设计模式 前端开发 JavaScript
Spring MVC(一)【什么是Spring MVC】
Spring MVC(一)【什么是Spring MVC】
|
29天前
|
Java Apache vr&ar
springmvc报错 nested exception is org.mybatis.spring.MyBatisSystemException:
springmvc报错 nested exception is org.mybatis.spring.MyBatisSystemException:
15 0
|
6月前
|
前端开发 Java Go
Spring MVC 和 Spring Boot 的区别
Spring MVC 和 Spring Boot 的区别
109 0
|
9月前
|
Java Spring
springmvc中spring提供的中文乱码解决问题
可以解决浏览器的乱码问题
44 0
|
4月前
|
设计模式 前端开发 Java
Spring Boot之Spring MVC的工作原理 以及使用eclipse开发Spring MVC的Web应用实战(附源码)
Spring Boot之Spring MVC的工作原理 以及使用eclipse开发Spring MVC的Web应用实战(附源码)
45 0