《Spring實戰(第4版)》——1.3 俯瞰Spring風景線
本節書摘來自異步社區《Spring實戰(第4版)》一書中的第1章,第1.3節,作者: 【美】Craig Walls(沃爾斯)著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看
1.3 俯瞰Spring風景線
正如你所看到的,Spring框架關注於通過DI、AOP和消除樣板式代碼來簡化企業級Java開發。即使這是Spring所能做的全部事情,那Spring也值得一用。但是,Spring實際上的功能超乎你的想象。
在Spring框架的範疇內,你會發現Spring簡化Java開發的多種方式。但在Spring框架之外還存在一個構建在核心框架之上的龐大生態圈,它將Spring擴展到不同的領域,例如Web服務、REST、移動開發以及NoSQL。
首先讓我們拆開Spring框架的核心來看看它究竟為我們帶來了什麼,然後我們再瀏覽下Spring Portfolio中的其他成員。
1.3.1 Spring模塊
當我們下載Spring發布版本並查看其lib目錄時,會發現裏麵有多個JAR文件。在Spring 4.0中,Spring框架的發布版本包括了20個不同的模塊,每個模塊會有3個JAR文件(二進製類庫、源碼的JAR文件以及JavaDoc的JAR文件)。完整的庫JAR文件如圖1.6所示。
圖1.6 Spring框架由20個不同的模塊組成
這些模塊依據其所屬的功能可以劃分為6類不同的功能,如圖1.7所示。
總體而言,這些模塊為開發企業級應用提供了所需的一切。但是你也不必將應用建立在整個Spring框架之上,你可以自由地選擇適合自身應用需求的Spring模塊;當Spring不能滿足需求時,完全可以考慮其他選擇。事實上,Spring甚至提供了與其他第三方框架和類庫的集成點,這樣你就不需要自己編寫這樣的代碼了。
圖1.7 Spring框架由6個定義良好的模塊分類組成
讓我們逐一瀏覽Spring的模塊,看看它們是如何構建起Spring整體藍圖的。
Spring核心容器
容器是Spring框架最核心的部分,它管理著Spring應用中bean的創建、配置和管理。在該模塊中,包括了Spring bean工廠,它為Spring提供了DI的功能。基於bean工廠,我們還會發現有多種Spring應用上下文的實現,每一種都提供了配置Spring的不同方式。
除了bean工廠和應用上下文,該模塊也提供了許多企業服務,例如E-mail、JNDI訪問、EJB集成和調度。
所有的Spring模塊都構建於核心容器之上。當你配置應用時,其實你隱式地使用了這些類。貫穿本書,我們都會涉及到核心模塊,在第2章中我們將會深入探討Spring的DI。
Spring的AOP模塊
在AOP模塊中,Spring對麵向切麵編程提供了豐富的支持。這個模塊是Spring應用係統中開發切麵的基礎。與DI一樣,AOP可以幫助應用對象解耦。借助於AOP,可以將遍布係統的關注點(例如事務和安全)從它們所應用的對象中解耦出來。
我們將在第4章深入探討Spring對AOP支持。
數據訪問與集成
使用JDBC編寫代碼通常會導致大量的樣板式代碼,例如獲得數據庫連接、創建語句、處理結果集到最後關閉數據庫連接。Spring的JDBC和DAO(Data Access Object)模塊抽象了這些樣板式代碼,使我們的數據庫代碼變得簡單明了,還可以避免因為關閉數據庫資源失敗而引發的問題。該模塊在多種數據庫服務的錯誤信息之上構建了一個語義豐富的異常層,以後我們再也不需要解釋那些隱晦專有的SQL錯誤信息了!
對於那些更喜歡ORM(Object-Relational Mapping)工具而不願意直接使用JDBC的開發者,Spring提供了ORM模塊。Spring的ORM模塊建立在對DAO的支持之上,並為多個ORM框架提供了一種構建DAO的簡便方式。Spring沒有嚐試去創建自己的ORM解決方案,而是對許多流行的ORM框架進行了集成,包括Hibernate、Java Persisternce API、Java Data Object和iBATIS SQL Maps。Spring的事務管理支持所有的ORM框架以及JDBC。
在第10章討論Spring數據訪問時,你會看到Spring基於模板的JDBC抽象層能夠極大地簡化JDBC代碼。
本模塊同樣包含了在JMS(Java Message Service)之上構建的Spring抽象層,它會使用消息以異步的方式與其他應用集成。從Spring 3.0開始,本模塊還包含對象到XML映射的特性,它最初是Spring Web Service項目的一部分。
除此之外,本模塊會使用Spring AOP模塊為Spring應用中的對象提供事務管理服務。
Web與遠程調用
MVC(Model-View-Controller)模式是一種普遍被接受的構建Web應用的方法,它可以幫助用戶將界麵邏輯與應用邏輯分離。Java從來不缺少MVC框架,Apache的Struts、JSF、WebWork和Tapestry都是可選的最流行的MVC框架。
雖然Spring能夠與多種流行的MVC框架進行集成,但它的Web和遠程調用模塊自帶了一個強大的MVC框架,有助於在Web層提升應用的鬆耦合水平。在第5章到第7章中,我們將會學習Spring的MVC框架。
除了麵向用戶的Web應用,該模塊還提供了多種構建與其他應用交互的遠程調用方案。Spring遠程調用功能集成了RMI(Remote Method Invocation)、Hessian、Burlap、JAX-WS,同時Spring還自帶了一個遠程調用框架:HTTP invoker。Spring還提供了暴露和使用REST API的良好支持。
我們將會在第15章討論Spring的遠程調用功能。在第16章學習如何創建和使用REST API。
Instrumentation
Spring的Instrumentation模塊提供了為JVM添加代理(agent)的功能。具體來講,它為Tomcat提供了一個織入代理,能夠為Tomcat傳遞類文件,就像這些文件是被類加載器加載的一樣。
如果這聽起來有點難以理解,不必對此過於擔心。這個模塊所提供的Instrumentation使用場景非常有限,在本書中,我們不會介紹該模塊。
測試
鑒於開發者自測的重要性,Spring提供了測試模塊以致力於Spring應用的測試。
通過該模塊,你會發現Spring為使用JNDI、Servlet和Portlet編寫單元測試提供了一係列的mock對象實現。對於集成測試,該模塊為加載Spring應用上下文中的bean集合以及與Spring上下文中的bean進行交互提供了支持。
在本書中,有很多的樣例都是測試驅動的,將會使用到Spring所提供的測試功能。
1.3.2 Spring Portfolio
當談論Spring時,其實它遠遠超出我們的想象。事實上,Spring遠不是Spring框架所下載的那些。如果僅僅停留在核心的Spring框架層麵,我們將錯過Spring Portfolio所提供的巨額財富。整個Spring Portfolio包括多個構建於核心Spring框架之上的框架和類庫。概括地講,整個Spring Portfolio幾乎為每一個領域的Java開發都提供了Spring編程模型。
或許需要幾卷書才能覆蓋Spring Portfolio所提供的所有內容,這也遠遠超出了本書的範圍。不過,我們會介紹Spring Portfolio中的一些項目,同樣,我們將體驗一下核心框架之外的另一番風景。
Spring Web Flow
Spring Web Flow建立於Spring MVC框架之上,它為基於流程的會話式Web應用(可以想一下購物車或者向導功能)提供了支持。我們將在第8章討論更多關於Spring Web Flow的內容,你還可以訪問Spring Web Flow的主頁。
Spring Web Service
雖然核心的Spring框架提供了將Spring bean以聲明的方式發布為Web Service的功能,但是這些服務是基於一個具有爭議性的架構(拙劣的契約後置模型)之上而構建的。這些服務的契約由bean的接口來決定。 Spring Web Service提供了契約優先的Web Service模型,服務的實現都是為了滿足服務的契約而編寫的。
Spring Security
安全對於許多應用都是一個非常關鍵的切麵。利用Spring AOP,Spring Security為Spring應用提供了聲明式的安全機製。你將會在第9章看到如何為應用的Web層添加Spring Security功能。同時,我們還會在第14章重新回到Spring Security的話題,學習如何保護方法調用。
Spring Integration
許多企業級應用都需要與其他應用進行交互。Spring Integration提供了多種通用應用集成模式的Spring聲明式風格實現。
Spring Batch
當我們需要對數據進行大量操作時,沒有任何技術可以比批處理更勝任這種場景。如果需要開發一個批處理應用,你可以通過Spring Batch,使用Spring強大的麵向POJO的編程模型。
Spring Data
Spring Data使得在Spring中使用任何數據庫都變得非常容易。盡管關係型數據庫統治企業級應用多年,但是現代化的應用正在認識到並不是所有的數據都適合放在一張表中的行和列中。一種新的數據庫種類,通常被稱之為NoSQL數據庫[2],提供了使用數據的新方法,這些方法會比傳統的關係型數據庫更為合適。
不管你使用文檔數據庫,如MongoDB,圖數據庫,如Neo4j,還是傳統的關係型數據庫,Spring Data都為持久化提供了一種簡單的編程模型。這包括為多種數據庫類型提供了一種自動化的Repository機製,它負責為你創建Repository的實現。
我們將會在第11章看到如何使用Spring Data簡化Java Persistence API(JPA)開發,然後在第12章,將相關的討論拓展至幾種NoSQL數據庫。
Spring Social
社交網絡是互聯網領域中新興的一種潮流,越來越多的應用正在融入社交網絡網站,例如Facebook或者Twitter。如果對此感興趣,你可以了解一下Spring Social,這是Spring的一個社交網絡擴展模塊。
不過,Spring Social並不僅僅是tweet和好友。盡管名字是這樣,但Spring Social更多的是關注連接(connect),而不是社交(social)。它能夠幫助你通過REST API連接Spring應用,其中有些Spring應用可能原本並沒有任何社交方麵的功能目標。
Spring Mobile
移動應用是另一個引人矚目的軟件開發領域。智能手機和平板設備已成為許多用戶首選的客戶端。Spring Mobile是Spring MVC新的擴展模塊,用於支持移動Web應用開發。
Spring for Android
與Spring Mobile相關的是Spring Android項目。這個新項目,旨在通過Spring框架為開發基於Android設備的本地應用提供某些簡單的支持。最初,這個項目提供了Spring RestTemplate的一個可以用於Android應用之中的版本。它還能與Spring Social協作,使得原生應用可以通過REST API進行社交網絡的連接。
Spring Boot
Spring極大地簡化了眾多的編程任務,減少甚至消除了很多樣板式代碼,如果沒有Spring的話,在日常工作中你不得不編寫這樣的樣板代碼。Spring Boot是一個嶄新的令人興奮的項目,它以Spring的視角,致力於簡化Spring本身。
Spring Boot大量依賴於自動配置技術,它能夠消除大部分(在很多場景中,甚至是全部)Spring配置。它還提供了多個Starter項目,不管你使用Maven還是Gradle,這都能減少Spring工程構建文件的大小。
在本書即將結束的第21章,我們將會學習Spring Boot。
最後更新:2017-05-31 10:31:52