那些你該瞭解的Spring子項目

去年年底,Spring Framework正式發佈了3.2GA版本,距離3.1版的發佈時間正好相隔一年,而距離最早的Sprig Framework 1.0 Final發佈也 已8年有餘。現在的Spring幾乎成了Java項目中的“標配”,被運用於大大小小的系統之中。它出衆的模塊化特性讓人們可以僅僅使用需要的部分,所以 很多開發者往往只瞭解Spring核心框架中的IoC和AOP,有的還用了數據訪問和MVC部分,而不關心其他內容,更不用提它的子項目了。

在首次SpringOne中國大會上,幾位Spring開發團隊的成員表示Spring核心框架的發佈之所以間隔時間越來越大,正是因爲越來越多的 功能被放到了子項目中獨立開發,所以這些子項目才變得愈發重要起來。比如,現在日益流行起來的Spring Batch、Spring Integration和Spring Data,正如Mark Pollack博士在接受採訪時所表示的那樣:

我們一直在持續追蹤Maven上的下載統計信息,這些項目的下載量都是呈指數級增長的。我最近沒有關注,但我認爲,Spring Integration和Spring Batch的流行程度比較接近。Spring Data JPA是最流行的項目,雖然NoSQL的討論很熱烈,但企業開發者還是在使用關係型數據庫,所以對這個結果我們並未感到太吃驚。我們的MongoDB支持、Redis支持最近也越來越流行了,還有Neo4j,它們的成長曲線很漂亮,終會和Spring Integration和Spring Batch一樣流行的。
雖然我們無法瞭解詳細的下載統計數據,不過通過Google Trends,還是可以對這三個子項目關注度的發展趨勢有所瞭解。

Spring Data

Spring Framework中的數據訪問模塊對JDBC及ORM提供了很好的支持,隨着NoSQL和BigData的興起,出現了越來越多的新技術,比如非關係型數據庫、MapReduce框架,Spring Data正 是爲了讓Spring開發者能更方便地使用這些新技術而誕生的“大”項目——它由一系列小的項目組成,分別爲不同的技術提供支持,例如Spring Data JPA、Sprng Data Hadoop、Spring Data MongoDB、Spring Data Redis等等。通過Spring Data,開發者可以用Spring提供的相對一致的方式來訪問位於不同類型的數據存儲中的數據

除了新技術,Spring Data還爲傳統的關係型數據庫提供了很多額外的支持,讓開發者能夠更好地利用關係型數據庫,比如對Oracle RAC的支持。

Spring Batch

Spring Batch是一款專門針對企業級系統中的日常批處理任務的輕量級框架,能夠幫助開發者方便地開發出強壯、高效的批處理應用程序。瑞友科技IT應用研究院副院長池建強是這樣介紹Spring Batch的

Spring Batch是一款優秀的、開源的大數據量並行處理框架。通過Spring Batch可以構建出輕量級的、健壯的併發處理應用,支 持事務、併發、流程、監控、縱向和橫向擴展,提供統一的接口管理和任務管理。

Spring Batch對批處理任務進行了一定的抽象,它的架構可以大致分爲三層,自上而下分別是業務邏輯層、批處理執行環境層和基礎設施層。構建於Spring Framework之上,Spring Batch可以很好地利用Spring帶來的各種便利,同時也爲開發者提供了相對熟悉的開發體驗。

很多人在瞭解了Spring Batch的流程控制和定義部分時,都會將其和工作流引擎混淆在一起。針對這個問題,Spring Batch的開發者Josh Long(他同時也是開源工作流引擎Activiti的貢獻者)做出了這樣的解釋:

Spring Batch更多地關注於大規模的批處理任務,例如,它提供了很多方法來讀取大型的文件(比如1GB的CSV、XML文件),在數據庫中加載或更新幾萬甚至幾十萬條記錄。試想,一個對大規模批處理並不熟悉的開發者很可能會直接select出所有記錄,以至於拖垮整個系統,而使用了Spring Batch,框架會幫助他每次撈取一部分記錄進行分頁,在更新時分批進行提交……

在處理大任務時,還可以根據需要,將任務拆成多個部分分配到不同的服務器上進行處理,隨後再整合結果。其可擴展性和靈活性由此就已可見一斑了。

Spring Integration

在企業軟件開發過程中,經常會遇到需要與外部系統集成的情況,這時可能會使用EJB、RMI、JMS等各種技術,也許你會引入ESB。如果你在開發時用了Spring Framework,那麼不妨考慮Spring Integration——它爲Spring編程模型提供了一個支持企業集成模式(Enterprise Integration Patterns)的擴展,在應用程序中提供輕量級的消息機制,可以通過聲明式的適配器與外部系統進行集成。

Spring Integraton中有幾個基本的概念——Message(帶有元數據的Java對象)、Channel(傳遞消息的管道)和Message Endpoint(消息的處理端)。在處理端可以對消息進行轉換、路由、過濾、拆分、聚合等操作;更重要的是可以使用Channel Adapter,這是應用程序與外界交互的地方,輸入是Inbound、輸出則是Outbound,可選的連接類型有很多,比如AMQP、JDBC、 Web Services、FTP、JMS、XMPP、多種NoSQL數據庫等等。只需通過簡單的配置文件就能將所有這些東西串聯在一起,實現複雜的集成工作。

Spring還有很多其他子項目,比如:

  • Spring Security(早期也叫Acegi),是較爲成熟的子項目之一,是一款可定製化的身份驗證和訪問控制框架
  • Spring Roo,快速應用程序開發工具,可以在短時間內方便地生成應用程序
  • Spring Mobile,對Spring MVC的擴展,旨在簡化移動Web應用的開發
  • Spring for Android,用於簡化Android原生應用程序開發的Spring擴展

大家可以訪問SpringSource的項目頁面或者它們的GitHub瞭解更多信息。您使用過哪些Spring子項目呢,不妨也和大家分享一下吧。

 

(本文首發於InfoQ中文站,地址爲:http://www.infoq.com/cn/news/2013/01/spring-subprojects ,其實最近寫的東西都是先發在InfoQ上,想過幾天發博客,結果事情一多就忘了,就挑幾篇自己感覺還行的集中搬一次吧。)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章