說到Java的mvc框架,struts2和springmvc想必你們都知道,struts2的設計基本上徹底脫離了Servlet容器,而springmvc是依託着Servlet容器元素來設計的,同時springmvc基於spring框架,Spring框架想必搞java的同窗都很熟悉。html
一進Spring的官網就發現了這樣一排醒目的文字, spring可讓咱們構造簡單的、便攜的、又快又易於擴展的基於jvm的系統和應用程序。java
沒錯,基於Spring的MVC框架SpringMVC一樣也能夠構造具備這些特性的系統。git
樓主從5.1開始寫的第一篇《SpringMVC入門》開始,到如今差很少將近2個月的時間,以後陸陸續續寫了幾篇關於SpringMVC的源碼分析文章。github
有同窗想研究SpringMVC源碼或想深刻學習一下SpringMVC的話,能夠參考本系列文章。spring
廢話很少說,本系列的文章都是基於Spring4.0.2版本的,樓主寫的時候出到了4.0.2,也是最新的,如今的最新版本是4.0.5。json
文章閱讀順序:mvc
1. SpringMVC入門app
SpringMVC的入門文章, 對於某些沒接觸過SpringMVC的同窗來講,能夠閱讀如下,瞭解這個框架的結構以及使用,以入門的同窗能夠選擇不看~框架
2. SpringMVC核心分發器DispatcherServlet分析jvm
SpringMVC入口Servlet -> DispatcherServlet的分析,解釋了DispatcherServlet的父類FrameworkServlet以及FrameworkServlet的父類HttpServletBean的做用
3. 詳解SpringMVC請求的時候是如何找到正確的Controller
想知道http請求是如何找到對應Controller中的方法的嗎,這個過程中到底發生了什麼,你知道嗎? 本篇將爲你一一解答。
4. 詳解SpringMVC中Controller的方法中參數的工做原理
同窗們有想過http請求找到對應Controller中的方法以後,方法中的參數是如何被注入進來的嗎?好比:
public String method(HttpServletRequest request, String name) { ... }
這裏的HttpServletRequest類型的request參數以及String類型的name參數是如何自動被注入到method方法中的? 主要是兩個重要的接口的做用:HandlerMethodArgumentResolver(請求參數處理)和HandlerMethodReturnValueHandler(返回值處理)。文中還寫了一個自定義的HandlerMethodArgumentResolver接口實現類FormObjArgumentResolver,該類處理Controller方法中多個自定義類參數的處理(建議看完類型轉換文章後再看這個類的具體實現代碼)。
5. SpringMVC關於json、xml自動轉換的原理研究
經過json、xml的自動轉換鞏固第四篇文章的知識,自動轉換由RequestResponseBodyMethodProcessor處理,該類實現了HandlerMethodArgumentResolver和HandlerMethodReturnValueHandler接口。
介紹了屬性編輯器的概念以及Spring對屬性編輯器的支持,本文知識消化以後能夠回過頭看第4篇中FormObjArgumentResolver的實現。
解釋了SpringMVC攔截器的設計原理。
分析了SpringMVC的視圖機制,主要也就是講解View和ViewResolver這兩個接口的做用。寫完以後還寫了篇關於重定向視圖RedirectView的小吐槽:SpringMVC重定向視圖RedirectView小分析。
解釋了SpringMVC異常機制的設計原理。
額外知識:
有同窗想了解本系列沒講到的知識的話,若是以爲合適,樓主會繼續寫關於這些內容的博客的。
目前這些博客已經放到了github上: https://github.com/fangjian0423/springmvc-source-minibook
也能夠在線閱讀,或者下載pdf,moni,epub:https://www.gitbook.com/book/fangjian0423/springmvc-source-minibook/details
最後附上Spring4.0.2官方文檔:http://docs.spring.io/spring/docs/4.0.2.RELEASE/spring-framework-reference/htmlsingle/