前言
工作四年了蚓胸,spring的重要性不言而喻,但是卻沒系統(tǒng)的學習過spring 源碼买雾,感覺好不應該牵敷。今年正好趁著機會好好的學習一下,自己寫博客的意義在于對看書學習的一個總結(jié)椿息,便于以后復習和指正歹袁,因為隨著工作經(jīng)驗和個人能力的進步坷衍,理解的角度和深度都會不一樣,這樣就可以看以前博客条舔,發(fā)現(xiàn)當時自己看書思維的局限性枫耳。
主要借鑒的是spring 源碼深度解析這本書,使用的是spring3.2版本的源碼分析逞刷,雖然現(xiàn)在公司和自己平時都使用的4.x版本嘉涌,但是核心的IOC,AOP夸浅,事務等等源碼的改變不大仑最。
spring架構(gòu)
Core Container
- Core Container(核心容器)包含有Core、Beans帆喇、Context和Expression Language模塊警医。
- Core和Beans模塊是框架的基礎部分,提供IoC(轉(zhuǎn)控制)和依賴注入特性坯钦。這里的基礎概念是BeanFactory预皇,它提供對Factory模式的經(jīng)典實現(xiàn)來消除對程序性單例模式的需要,并真正地允許你從程序邏輯中分離出依賴關系和配置婉刀。
- Core模塊主要包含Spring框架基本的核心工具類吟温,Spring的其他組件要都要使用到這個包里的類,Core模塊是其他組件的基本核心突颊。當然你也可以在自己的應用系統(tǒng)中使用這些工具類鲁豪。
- Beans模塊是所有應用都要用到的,它包含訪問配置文件律秃、創(chuàng)建和管理bean以及進行Inversion of Control / Dependency Injection(IoC/DI) 操作相關的所有類爬橡。
- Context模塊構(gòu)建于Core和Beans模塊基礎之上,提供了一種類似于JNDI注冊器的框架式的對象訪問方法棒动。Context模塊繼承了 Beans的特性糙申,為Spring核心提供了大量擴展,添加了對國際化(例如資源綁定)船惨、事件傳播柜裸、資源加載和對Context的透明創(chuàng)建的支持。Context模塊同時也支持J2EE的一些特性粱锐,例如EJB粘室、JMX和基礎的遠程處理。ApplicationContext接口是Context模塊的關鍵卜范。
- Expression Language 模塊提供了一個強大的表達式語言用于在運行時查詢和操縱對象衔统。它是 JSP 2.1規(guī)范中定義的 unifed expression language的一個擴展。該語言支持設置/獲取屬性的值,屬性的分配锦爵,方法的調(diào)用舱殿,訪問數(shù)組上下文(accessiong the context of arrays)、容器和索引器险掀、邏輯和算術運算符沪袭、命名變量以及從Spring的 IoC容器中根據(jù)名稱檢索對象。它也支持list投影樟氢、選擇和一般的list聚合冈绊。
Data Access/Integration
Data Access/Integration層包含有 JDBC、ORM埠啃、OXM死宣、JMS和Transaction模塊
Transaction 模塊支持編程和聲明性的事務管理,這些事務類必須實現(xiàn)特定的接口碴开,并且對所有的POJO都適用毅该。
Web
Web上下文模塊建立在應用程序上下文模塊之上,為基于Web的應用程序提供了上下文潦牛。所以眶掌, Spring框架支持與Jakarta Struts的集成。Web模塊還簡化了處理多部分請求以及將請求參數(shù)綁定到域?qū)ο蟮墓ぷ靼屯搿eb層包含了Web朴爬、Web-Servlet、Web-Struts和Web-Porlet模塊橡淆,
AOP
AOP模塊提供了一個符合AOP聯(lián)盟標準的面向切面編程的實現(xiàn)寝殴,它讓你可以定義例如方法攔截器和切點,從而將邏輯代碼分開明垢,降低它們之間的耦合性。利用 source-level 的元數(shù)據(jù)功能市咽,還可以將各種行為信息合并到你的代碼中
Test
Test模塊支持使用JUnit和TestNG對Spring組件進行測試痊银。
spring源碼編譯
下載gradle
安裝好之后
? ~ gradle -version
------------------------------------------------------------
Gradle 3.5
------------------------------------------------------------
Build time: 2017-04-10 13:37:25 UTC
Revision: b762622a185d59ce0cfc9cbc6ab5dd22469e18a6
Groovy: 2.4.10
Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM: 1.8.0_152-ea (Oracle Corporation 25.152-b02)
OS: Mac OS X 10.12.4 x86_64
安裝git
? ~ git --version
git version 2.10.1
安裝git成功之后,選擇自己的spring版本,
spring3.2.6git地址
git clone https://github.com/spring-projects/spring-framework.git
下載之后
編譯步驟:
- 進入到相應的目錄下施绎,進行預編譯溯革,這一步需要很長時間,學會科學上網(wǎng)
gradlew :spring-oxm:compileTestJava
第二步導入到idea中谷醉,F(xiàn)ile -> New -> Project from Existing Sources -> Select build.gradle
環(huán)境準備成功