javascript
SpringMVC源码阅读系列汇总
1.前言
1.1 導(dǎo)入
SpringMVC是基于Servlet和Spring框架設(shè)計的Web框架,做JavaWeb的同學(xué)應(yīng)該都知道
本文基于Spring4.3.7源碼分析,(不要被圖片欺騙了,手動滑稽),Spring官網(wǎng)告訴我們,Spring可以構(gòu)建基于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 版本歷史
| 0.9 | 2002 | ? |
| 1.0 | 2003 | ? |
| 2.0 | 2006 | ? |
| 3.0 | 2009 | ? |
| 4.0 | 2013 | ? |
| 5.0 | 2017 | ? |
1.3 雜談
2019年1月的某一天,我遇到了不能轉(zhuǎn)換Json和Xml的情況,百度了很久,都說Jar包版本不對,照網(wǎng)上說得改不行呢,在StackOverflow尬聊也沒有解決問題。后來我想到前公司的架構(gòu),發(fā)QQ問他,他半小時就給我解決方案,說把<mvc:annotation-driven/>啟動,注釋掉自己注入的Bean。或者手動注入MappingJackson2HttpMessageConverter和Jaxb2RootElementHttpMessageConverter。當時我聽到這些是懵圈的,沒有讀過源碼的我瑟瑟發(fā)抖,我問他怎么找到的,他發(fā)給我截圖,講在ReqeustMappingHandlerAdapter的afterPropertiesSet里發(fā)現(xiàn)了我的MessageConverters少了解析Xml和Json的核心類,頓時我恍然大悟,原來從源碼層面調(diào)試發(fā)現(xiàn)問題根本原因的效率這么高。樓主想到自己看了些所謂的教學(xué)視頻,學(xué)習(xí)著所謂的新技術(shù),卻不曉其理,甚是懊悔,從那時起,我決定開始讀SpringMVC源碼,第一篇文章在2019年1月22日完成,SpringMVC源碼閱讀系列持續(xù)更新,SpringMVC基本的模塊已經(jīng)閱讀完畢,模塊有需要補充的或者新模塊可以評論告訴樓主。
?
Spring4.3在2016年1月10日發(fā)布,官方提供更新支持到2020年,它快走到了盡頭,但是沒關(guān)系,目前國內(nèi)有大把的人再用Spring4,短期內(nèi)不會過時,現(xiàn)在甚至還有人用Spring3呢。
我沒有選擇閱讀Spring5的原因如下:
2.正文
2.1 文章推薦閱讀順序
SpringMVC源碼閱讀入門
有SpringMVC基礎(chǔ)的可以直接忽略不看。小白可以看看,該文不僅介紹了簡單的SpringMVC demo如何搭建,也交代了閱讀源碼的技巧
這個SpringMVC demo是一個增刪改查demo,持久層使用Hibernate,配置力圖最簡。讀者別看它是個簡單的demo,麻雀雖小,五臟俱全,后續(xù)文章的內(nèi)容都是基于該demo分析
?
SpringMVC源碼閱讀:核心分發(fā)器DispatcherServlet
解讀SpringMVC的核心類,SpringMVC所有的邏輯都離不開它
?
SpringMVC源碼閱讀:定位Controller
解讀SpringMVC如何找到我們定義的Controller和Controller中的方法,比如路徑是如何映射的,弄清楚Controller是如何匹配我們傳入的參數(shù),并定義簡單的參數(shù)解析器
?
SpringMVC源碼閱讀:Controller中參數(shù)解析
解讀Controller方法中的參數(shù)解析和參數(shù)解析類
?
SpringMVC源碼閱讀:Json,Xml自動轉(zhuǎn)換
解讀SpringMVC的Json和Xml的轉(zhuǎn)換原理
?
SpringMVC源碼閱讀:屬性編輯器、數(shù)據(jù)綁定
解讀SpringMVC數(shù)據(jù)綁定機制和屬性編輯器,介紹BeanWrapper,并自定義屬性編輯器
?
SpringMVC源碼閱讀:攔截器
解讀SpringMVC攔截器的工作原理并自定義攔截器
?
SpringMVC源碼閱讀:過濾器
解讀SpringMVC過濾器的工作原理,并自定義過濾器,讓你弄清楚過濾器和攔截器的區(qū)別
?
SpringMVC源碼閱讀:視圖解析器
即使前后端分離大行其道,視圖解析器作為Spring源碼的一部分,我們還是要研讀。該文解讀SpringMVC如何完成視圖解析,提供Freemarker和Jsp的共存方案
?
SpringMVC源碼閱讀:異常解析器
解讀SpringMVC如何完成異常解析、捕捉異常,并自定義異常和異常解析器
?
2.2 SpringMVC流程圖
博主根據(jù)打斷點調(diào)試畫得流程圖,用Xmind畫圖
?
3.參考
https://docs.spring.io/spring/docs/4.3.7.RELEASE/spring-framework-reference/htmlsingle/#beans-beans-conversion
轉(zhuǎn)載于:https://www.cnblogs.com/Java-Starter/p/10475374.html
總結(jié)
以上是生活随笔為你收集整理的SpringMVC源码阅读系列汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: arcgis api for js图层显
- 下一篇: JS使用onscroll、scrollT