Spring的根本使命是?web
簡化Java開發spring
爲了下降Java開發的複雜性,Spring採起了哪4種關鍵策略?數據庫
1、基於POJO的輕量級和最小侵入性編程編程
2、經過依賴注入和麪向接口實現鬆耦合安全
3、基於切面和慣例進行聲明式編程網絡
4、經過切面和模板減小樣板式代碼app
依賴注入與AOP編程框架
1、若是想對依賴注入有更多的認識,推薦閱讀Dhanji R. Prasanna的《Dependency Injection》異步
2、依賴注入讓相互協做的軟件組件保持鬆散耦合,而AOP編程容許你把遍及應用各處的功能分離出來造成可重用的組件工具
樣板代碼
如JDBC、JMS、JNDI和使用REST服務一般會涉及大量的重複代碼
Spring容器
並不存在單一的Spring容器,Spring自帶了幾種容器實現,能夠歸爲兩種不一樣的類型。Bean工廠(bean factories,由org.springframwork.beans.factory.BeanFactory接口定義)是最簡單的容器,提供基本的DI支持。應用上下文(application由org.springframework.context.ApplicationContext接口定義),基於BeanFactory之上構建,並提供面向應用的服務,例如從屬性文件解析文本信息的能力,以及發佈應用事件給感興趣的事件監聽者的能力
雖然咱們能夠在Bean工廠和應用上下文二者之間任選一種,但Bean工廠對於大多數應用來講每每過低級了,所以應用上下文要比Bean工廠更受歡迎,咱們會把精力放在應用上線文中,而不是Bean工廠
使用應用上下文
Spring自帶了幾種類型的應用上下文,下面羅列了3種是用戶最有可能遇到的
1、ClassPathXmlApplicationContext——從類路徑下的XML配置文件中加載上下文定義,把應用上下文定義文件當作類資源
2、FileSystemXmlApplicationContext——讀取文件系統下的XML配置文件並加載上下文定義
3、XmlWebApplicationContext——讀取Web應用下的XML配置文件並裝載上下文定義
將Bean加載到Bean工廠
如何使用一個FileSystemXmlApplicationContext
ApplicationContext context = new FileSystemXmlApplicationContext("c:/foo.xml")
如何使用一個ClassPathXmlApplicationContext
ApplicationContext context = new ClassPathXmlApplicationContext ("foo.xml")
是在全部的類路徑(包括JAR文件)下查找foo.xml文件
經過現有的應用上下文引用,你能夠調用應用上下文的getBean()方法從Spring容器中獲取Bean
Bean的生命週期
傳統的Java應用,Bean的生命週期很簡單。使用Java關鍵字new進行Bean實例化,而後該Bean就能夠被使用了。一旦該Bean再也不被使用,則又Java自動進行垃圾回收
Bean裝載到Spring應用上下文中的一個典型的聲明週期過程
Bean在Spring容器中從建立到銷燬經歷了若干階段,每一階段均可以針對Spring如何管理Bean進行個性化定製
1、Spring對Bean進行實例化
2、Spring將值和Bean的引用注入進Bean對應的屬性中
3、若是Bean實現了BeanNameAware接口,Spring將Bean的ID傳遞給SetBeanName()接口方法
4、若是Bean實現了BeanFactoryAware接口,Spring將調用setBeanFactory()接口方法,將BeanFactory容器實例傳入
5、若是Bean實現了ApplicationContextAware接口,Spring將調用setApplicationContext()接口方法,將應用上下文的引用傳入
6、若是Bean實現了BeanPostProcessor接口,Spring將調用它們的postProcessBeforeInitialization()接口方法
7、若是Bean實現了InitializingBean接口,Spring將調用它們的afterPropertiesSet()接口方法。相似地,若是Bean使用initMethod聲明瞭初始化方法,該方法也會被調用
8、若是Bean實現了BeanPostProcessor接口,Spring將調用它們的postPoressAfterInitialization()方法
9、此時此刻,Bean已經準備就緒,能夠被應用程序使用了,它們將一直駐留在應用上下文中,直到該應用上下文被銷燬
10、若是Bean實現了DisposableBean接口,Spring將調用它的destroy()接口方法。一樣,若是Bean使用destroy-method聲明瞭銷燬方法,該方法也會被調用
Spring模塊
Spring框架是由幾個不一樣模塊所構成的。當咱們下載Spring並解壓縮後,在dist目錄下你會看到20個不一樣的JAR文件,以下圖
組成Spring的這20個JAR文件依據其所屬功能能夠劃分爲6個不一樣的功能模塊
以下圖
整體而言,這6個模塊爲開發企業級應用提供了所需的一切,可是你也沒必要將應用創建在整個Spring框架之上,你能夠自由地選擇合適自身應用需求的Spring模塊;當Spring不能知足需求時,徹底能夠考慮其餘選擇。事實上,Spring甚至還集成了其餘第三方框架和類庫,你能夠自由的使用
核心Spring容器
容器是Spring框架最核心的部分,它負責Spring應用中的Bean的建立、配置和管理。在該模塊中,你會發現Spring的Bean工廠提供了依賴注入。在Bean工廠之上,你會發現幾種Spring應用上下文的實現,每一種提供了配置Spring的不一樣方式
除了Bean工廠和應用上下文,該模塊也提供了許多企業服務,例如郵件、JNDI訪問、EJB集成和調度
正如你所看到的,全部的Spring模塊都構建於核心容器之上。當配置應用時,其實隱式使用了這些類。
Spring的AOP模塊
在AOP的模塊中,Spring對面向切面編程提供了豐富的支持。這個模塊是Spring應用系統開發切面的基礎。與依賴注入同樣,AOP能夠幫助應用對象解耦。藉助於AOP,能夠將遍及應用的關注點(例如事務和安全)從它們所應用的對象中解耦出來
數據訪問與集成
使用JDBC編寫代碼一般會致使大量的樣板代碼,例如得到數據庫鏈接、建立語句、處理結果集到最後關閉數據鏈接。Spring的JDBC和DAO(data access objects)模塊封裝了這些樣板式代碼,使咱們的數據庫代碼變得簡單明瞭,還能夠避免由於釋放數據庫資源失敗而引起的問題。該模塊在幾種數據庫服務的錯誤信息之上構建了一個語義豐富的異常層,之後咱們不再須要解釋那些晦澀專有的SQL錯誤信息了
Spring爲那些喜歡ORM(object-relational mapping) 工具的開發者提供了ORM模塊。Spring的ORM模塊創建在對DAO的支持上,併爲某些ORM框架提供了一種構建DAO的簡便方式。Spring沒有嘗試去建立本身的ORM解決方案,而是對許多流行ORM框架進行集成,包括Hibernate、Java Persisternce API、JDO和iBATIS。Spring的事物管理支持全部的ORM框架以及JDBC
本模塊一樣包含了在JMS之上構建的Spring抽象層,使用消息以異步的方式與其餘應用集成。從Spring3.0開始,本模塊還包含了對象到XML映射的特性,它最初是Spring Web Service項目的一部分
除此以外,本模塊使用Spring AOP模塊爲Spring應用中的對象提供事務管理服務
Web和遠程調用
MVC模式已經被廣泛的接受爲一種構建Web應用的方法,它有助於將用戶界面邏輯與應用邏輯分離。Java歷來不缺乏MVC框架,Apache的Struts、JSF、WebWork個Tapestry都是流行的MVC框架
最然Spring集成了多種流行的MVC框架,但它的Web和遠程調用模塊自帶了一個強大的MVC框架,有助於應用提高Web層技術的鬆耦合。該框架提供了兩種形式:面向傳統Web應用的基於Servlet的框架和麪向使用Java Porlet API的基於Portlet的應用
除了面向用戶的Web應用,該模塊還提供了構建於其餘應用交互的幾種遠程調用的選擇。Spring遠程調用服務集成了RMI、Hessian、Burlap、JAX-WS,同時Spring還自帶了一個遠程跳動框架:HTTP invoker
測試
鑑於開發者自測的重要性,Spring提供了測試模塊來測試Spring應用
經過該模塊,你會發現Spring爲JNDI、Servlet和Portlet編寫單元測試提供了一系列的模擬對象實現。對於集成測試,該模塊爲加載Spring應用上下文中Bean的集合以及與Spring上下文中的Bean進行交互提供了支持
Spring Protfolio
當談到Spring時,它遠遠超出了咱們的想象。事實上,Spring遠不止Spring框架所帶來的那些。若是僅僅停留在覈心的Spring框架上,咱們將錯過龐大的Spring Portfoliot所提供的豐富財富。整個Spring Portfolio包括多個構建於核心Spring框架智商的框架和類庫。歸納地說,整個Spring Portfolio幾乎爲每個領域的Java開發都提供了Spring編程模型
Spring Web Flow
Spring Web Flow創建於Spring MVC框架之上併爲基於流程的會話式Web應用(想一想購物車,或者嚮導)提供支持。Spring Web Flow的主頁(http://www.springsource.org/webflow)
Spring Web Service
雖然核心的Spring框架提供了將Spring Bean以聲明的方式發佈爲Web Service
可是這些服務基於一個具備爭議性的框架 (拙劣的契約置後模型)之上而構建的。這些服務的契約由Bean的接口來決定。Spring Web Service提供了契約優先的Web Service模型,服務的實現都是爲了知足服務的契約而編寫的
主頁:http://static.springsource.org/spring-ws/sites/2.0
Spring Security
安全對於許多應用都是一個很是關鍵的切面。利用Spring AOP,Spring Security爲Spring應用提供了聲明式的安全機制
主頁:http://static.springsource.org/spring-security/site
Spring Integration
許多企業級應用都須要與其餘應用進行交互。Spring Integration提供了幾種通用的應用集成模式的Spring聲明式風格的實現
Spring Integration的相關書籍<Spring Integration in Action>
主頁:http://www.springsource.org/spring-integration
Spring Batch
當咱們須要對數據進行大量操做時,沒有任何技術能夠比批量處理更能勝任此場景的。若是須要開發一個批處理應用,你能夠藉助於Spring強大的面向POJO的編程模型來使用Spring Batch來實現
Spring Batch相關書籍<Spring Batch in Action>
主頁:http://www.springsource.org/spring-batch
Spring Social
社交網絡是互聯網然然升起的一顆新星,愈來愈多的應用正在融入社交網絡網站,例如Facebook或者Twitter。若是對此感興趣,你能夠了解下Spring Social,Spring的一個社交網絡擴展模塊
主頁:http://www.springsource.org/spring-social