框架學習前言html
這個模塊是面向Spring的,Spring的學習我是這麼想的:java
一、簡單介紹Spring,主要是從網上借鑑一些重點git
二、儘可能說明清楚Spring的使用方法以及細節點github
三、儘可能以本身的理解講清楚Spring中的一些源代碼spring
Spring是什麼apache
Spring是一款爲了解決企業應用開發的複雜性而建立的輕量級Java框架。框架的主要優點之一就是其分層架構,分層架構容許使用者選擇哪個組件,同時爲J2EE應用程序開發提供集成的框架。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用均可以從Spring中受益,Spring的核心是控制反轉IOC和面向切面AOP。編程
Spring的特徵設計模式
一、輕量架構
從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架能夠在一個大小隻有1M多的JAR文件裏發佈,而且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型的,Spring應用中的對象不依賴於Spring的特定類。app
二、控制反轉
Spring經過一種稱做控制反轉IOC的技術促進了低耦合。當應用了IOC,一個對象依賴的其餘對象會經過被動的方式傳遞進來,而不是這個對象本身建立或者查找依賴對象。
三、面向切面
Spring提供了面向切面編程的豐富支持,容許經過分離應用的業務邏輯與系統級服務進行內聚性的開發。應用程序只實現它們應該作的----完成業務邏輯,僅此而已,它們並不負責(甚至意識不到)其它的系統級關注點,例如日誌或事物支持。
四、容器
Spring包含並管理應用對象的配置和生命週期,在這個意義上它是一種容器,你能夠配置你的每一個bean如何被建立----基於一個可配置原型,你的bean能夠建立一個單獨的實例或者每次須要時都生成一個新的實例----以及它們是如何相互關聯的。
五、框架
Spring能夠將簡單的組件配置、組合成爲複雜的應用。在Spring中,應用對象被聲明式地組合,典型的是在一個XML文件裏。Spring也提供了不少基礎功能(事務管理、持久化框架集成等),將應用邏輯的開發留給開發者。
全部Spring的這些特徵使得開發者可以編寫更乾淨、更可管理、更易於測試的代碼,它們也爲Spring中的各類模塊提供了基礎支持。
Spring的特色
一、方便解耦,簡化開發
經過Spring提供的IOC容器,咱們能夠將對象之間的依賴關係交由Spring進行控制,避免硬編碼所形成的過分耦合。有了Spring,用戶沒必要再爲單實例模式類、屬性文件解析等這些很底層的需求編寫代碼,能夠更專一於上層的應用。
二、AOP編程的支持
經過Spring提供的AOP功能,方便進行面向切面的編程,許多不容易用傳統OOP實現的功能能夠經過AOP輕鬆應付。
三、聲明式事物的支持
在Spring中,咱們能夠從單調煩悶的事務管理代碼中解脫出來,經過聲明式靈活地進行事物的管理,提升開發效率和質量。
四、方便集成各類優秀框架
Spring不排斥各類優秀的開源框架,相反,Spring能夠下降各類框架的使用難度,Spring提供了對各類優秀框架如Structs、Hibernate、Hessian、Quartz等的直接支持。
五、下降Java EE API的使用難度
Spring對不少難用的Java EE API(如JDBC、JavaMail、RMI等)提供了一個薄薄的封裝層,經過Spring的簡易封裝,這些Java EE API的使用難度大爲下降
六、Java源碼是經典學習範例
Spring的源碼設計精妙、結構清晰、獨具匠心,到處體現着對Java設計模式靈活運用以及對Java技術的高深造詣。Spring框架源碼無疑是Java技術的最佳實踐範例,若是想在短期內迅速提升本身的Java技術水平和應用開發水平,學習和研究Spring的源碼將使你獲益匪淺。
Spring下載
Spring相關信息能夠去Spring官網查看,不過都是全英文版本的。
Spring目前的最新版本是4.2.2,點擊連接下載,解壓後應該是這樣的:
介紹一下每一個文件夾:
一、docs下是Spring相關資料,包括一個官方的英文版的資料《spring-framework-reference.pdf》以及網頁版本的Spring API,上面有全部的Spring類與方法相關信息,就和JDK API同樣
二、libs下包括了Spring全部jar包,注意一下"*.javadoc.jar"和"*.sources.jar"結尾的都是每一個模塊Spring提供的一些輔助文檔而已,並非真正要用的jar包的內容
三、schema裏面是Spring每一個組件、每一個版本的.xsd文件,用來設置.xml文件自動提示用的
Spring環境搭建以及.xml文件自動提示設置
爲了後面的學習,這裏講解一下如何搭建一個Spring框架以及如何爲.xml文件設置Spring標籤及相應屬性的自動提示:
一、右鍵工程->Build Path->Configure Build Path...,選擇Add External JARs...,導入全部libs下的jar包(若是隻用bean工廠的功能其實不所有導入也行)
二、咱們知道,Spring的使用是經過寫配置文件的,因此右鍵src->new->File,隨便命名,以xml結尾便可
三、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>
四、點擊Window->Preferences->MyEclipse->Files and Editors->XML->XML Catalog->Add->File System...,選擇解壓後的目錄Schema文件夾,beans目錄下的spring-beans-4.2.xsd,其實選任何一個版本的.xsd均可以,只要和你的Spring的.xml文件裏面那個版本號對應就能夠了
五、Key Type選擇"Schema Location",key填"http://www.springframework.org/schema/beans/spring-beans-4.2.xsd",也就是.xml文件裏面的那個路徑
六、點擊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須要兩樣工具:
一、GitHub,點我
二、Gradle,點我,注意下載安裝完Gradle要建立GRADLE_HOME系統變量,並將這個系統變量加入到path中,就和JDK同樣,這個不會的能夠上網查一下,安裝完進入cmd,輸入命令"gradle -version",打印出gradle的版本信息就表示gradle能夠用了
GitHub和Gradle都安裝完畢以後,分兩步:
一、使用GitHub下載源碼
首先下載安裝這兩個工具,OK以後,GitHub的bin目錄下雙擊"tclsh85.exe",就跟使用cmd同樣的,先隨便找一個想要下載到的目錄,使用"git clone git://github.com/SpringSource/Spring-framwwork.git"下載Spring源代碼,如圖:
下載完畢應該是:
二、當前下載的源碼並不能直接導入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上下載的。