框架學習前言
這個模組是面向Spring的,Spring的學習我是這麼想的:
1、簡單介紹Spring,主要是從網上借鑑一些重點
2、儘量說明清楚Spring的使用方法以及細節點
3、儘量以自己的理解講清楚Spring中的一些原始碼
Spring是什麼
Spring是一款為了解決企業應用開發的複雜性而建立的輕量級Java框架。框架的主要優勢之一就是其分層架構,分層架構允許使用者選擇哪一個元件,同時為J2EE應用程式開發提供整合的框架。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用都可以從Spring中受益,Spring的核心是控制反轉IOC和面向切面AOP。
Spring的特徵
1、輕量
從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小隻有1M多的JAR檔案裡釋出,並且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型的,Spring應用中的物件不依賴於Spring的特定類。
2、控制反轉
Spring通過一種稱作控制反轉IOC的技術促進了低耦合。當應用了IOC,一個物件依賴的其他物件會通過被動的方式傳遞進來,而不是這個物件自己建立或者查詢依賴物件。
3、面向切面
Spring提供了面向切面程式設計的豐富支援,允許通過分離應用的業務邏輯與系統級服務進行內聚性的開發。應用程式只實現它們應該做的----完成業務邏輯,僅此而已,它們並不負責(甚至意識不到)其它的系統級關注點,例如日誌或事物支援。
4、容器
Spring包含並管理應用物件的配置和生命週期,在這個意義上它是一種容器,你可以配置你的每個bean如何被建立----基於一個可配置原型,你的bean可以建立一個單獨的例項或者每次需要時都生成一個新的例項----以及它們是如何相互關聯的。
5、框架
Spring可以將簡單的元件配置、組合成為複雜的應用。在Spring中,應用物件被宣告式地組合,典型的是在一個XML檔案裡。Spring也提供了很多基礎功能(事務管理、持久化框架整合等),將應用邏輯的開發留給開發者。
所有Spring的這些特徵使得開發者能夠編寫更乾淨、更可管理、更易於測試的程式碼,它們也為Spring中的各種模組提供了基礎支援。
Spring的特點
1、方便解耦,簡化開發
通過Spring提供的IOC容器,我們可以將物件之間的依賴關係交由Spring進行控制,避免硬編碼所造成的過度耦合。有了Spring,使用者不必再為單例項模式類、屬性檔案解析等這些很底層的需求編寫程式碼,可以更專注於上層的應用。
2、AOP程式設計的支援
通過Spring提供的AOP功能,方便進行面向切面的程式設計,許多不容易用傳統OOP實現的功能可以通過AOP輕鬆應付。
3、宣告式事物的支援
在Spring中,我們可以從單調煩悶的事務管理程式碼中解脫出來,通過宣告式靈活地進行事物的管理,提高開發效率和質量。
4、方便整合各種優秀框架
Spring不排斥各種優秀的開源框架,相反,Spring可以降低各種框架的使用難度,Spring提供了對各種優秀框架如Structs、Hibernate、Hessian、Quartz等的直接支援。
5、降低Java EE API的使用難度
Spring對很多難用的Java EE API(如JDBC、JavaMail、RMI等)提供了一個薄薄的封裝層,通過Spring的簡易封裝,這些Java EE API的使用難度大為降低
6、Java原始碼是經典學習範例
Spring的原始碼設計精妙、結構清晰、獨具匠心,處處體現著對Java設計模式靈活運用以及對Java技術的高深造詣。Spring框架原始碼無疑是Java技術的最佳實踐範例,如果想在短時間內迅速提高自己的Java技術水平和應用開發水平,學習和研究Spring的原始碼將使你獲益匪淺。
Spring下載
Spring相關資訊可以去Spring官網檢視,不過都是全英文版本的。
Spring目前的最新版本是4.2.2,點選連結下載,解壓後應該是這樣的:
介紹一下每個資料夾:
1、docs下是Spring相關資料,包括一個官方的英文版的資料《spring-framework-reference.pdf》以及網頁版本的Spring API,上面有所有的Spring類與方法相關資訊,就和JDK API一樣
2、libs下包括了Spring所有jar包,注意一下"*.javadoc.jar"和"*.sources.jar"結尾的都是每個模組Spring提供的一些輔助文件而已,並不是真正要用的jar包的內容
3、schema裡面是Spring每個元件、每個版本的.xsd檔案,用來設定.xml檔案自動提示用的
Spring環境搭建以及.xml檔案自動提示設定
為了後面的學習,這裡講解一下如何搭建一個Spring框架以及如何為.xml檔案設定Spring標籤及相應屬性的自動提示:
1、右鍵工程->Build Path->Configure Build Path...,選擇Add External JARs...,匯入所有libs下的jar包(如果只用bean工廠的功能其實不全部匯入也行)
2、我們知道,Spring的使用是通過寫配置檔案的,所以右鍵src->new->File,隨便命名,以xml結尾即可
3、xml檔案裡面寫入,這是最基礎的模板,往後所有功能都在這個模板上擴充套件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd"> </beans>
4、點選Window->Preferences->MyEclipse->Files and Editors->XML->XML Catalog->Add->File System...,選擇解壓後的目錄Schema資料夾,beans目錄下的spring-beans-4.2.xsd,其實選任何一個版本的.xsd都可以,只要和你的Spring的.xml檔案裡面那個版本號對應就可以了
5、Key Type選擇"Schema Location",key填"http://www.springframework.org/schema/beans/spring-beans-4.2.xsd",也就是.xml檔案裡面的那個路徑
6、點選OK即可,之後配置Spring別的功能比如aop、context、jdbc什麼的XML提示也可以用類似的方法,.xml裡面配置一個地址,XML Catalog裡面新增一個XML Catalog Entry
Spring日誌系統搭建
Spring採用Apache common_logging,並結合Apache log4j作為日誌輸出元件,為了在除錯過程中可以觀察到Spring的日誌輸出,請先下載common_logging和log4j兩個jar包,不知道最新的兩個jar包是什麼版本的,我用的是比較老的,以前就下載的:
下載了之後請確保你的CLASSPATH下有這兩個jar包。有了這兩個jar包之後,右鍵src,新建一個"log4j.properties"檔案,配置如下:
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%c{1} - %m%n
這樣,在使用Spring的過程中,你就可以看到Spring的日誌輸出了。
Spring原始碼下載及匯入MyEclipse
既然我們的要學習原始碼,那勢必要獲取Spring的原始碼。Spring的原始碼是通過GitHub進行管理的,下載Spring原始碼並匯入MyEclipse需要兩樣工具:
1、GitHub,點我
2、Gradle,點我,注意下載安裝完Gradle要建立GRADLE_HOME系統變數,並將這個系統變數加入到path中,就和JDK一樣,這個不會的可以上網查一下,安裝完進入cmd,輸入命令"gradle -version",列印出gradle的版本資訊就表示gradle可以用了
GitHub和Gradle都安裝完畢之後,分兩步:
1、使用GitHub下載原始碼
首先下載安裝這兩個工具,OK之後,GitHub的bin目錄下雙擊"tclsh85.exe",就跟使用cmd一樣的,先隨便找一個想要下載到的目錄,使用"git clone git://github.com/SpringSource/Spring-framwwork.git"下載Spring原始碼,如圖:
下載完畢應該是:
2、當前下載的原始碼並不能直接匯入MyEclipse中,我們還需要將原始碼轉換為MyEclipse認識的形式,所以這時候就要用Gradle了。cmd進入命令視窗,切換至下載Spring原始碼所在的目錄,我們想要把哪個模組的原始碼轉成MyEclipse的就操作哪個資料夾,具體方式為:
轉換完畢應該是:
此時我們看一下資料夾下的spring-beans目錄:
這就是MyEclipse認識的形式,直接Import進入MyEclipse,當然這個時候專案上有紅色感嘆號,表示工程有錯,錯誤在:
用一樣的方式把spring-core轉一下匯入原始碼工程就好了。另外,spring-cglib-repack-3.1.jar和spring-objenesis-repack-2.2.jar報錯的問題,上網找一下這兩個jar包下載並匯入就好了,我是在CSDN上下載的。