Spring 的狹義與廣義 原

Java 開發者對於 Spring 應該不會陌生。Spring 可以說是 Java EE 開發事實上的標準。無論是 Web 開發,還是分佈式應用,Spring 都致力於簡化開發者創建應用的複雜性。本文討論 Spring 在狹義上以及廣義上,所承載的不同的概念。

Spring 有廣義與狹義之說。

狹義上的 Spring——Spring Framework

狹義上的 Spring, 是特指 Spring 框架(Spring Framework)。Spring 框架是爲了解決企業應用開發的複雜性而創建的。Spring 框架的主要優勢之一就是其分層架構。分層架構允許使用者選擇使用哪一個組件,同時爲 Java EE 應用程序開發提供集成的框架。Spring 框架使用基本的 POJO 來完成以前只可能由 EJB 完成的事情。然而,Spring 框架的用途不僅限於服務器端的開發。從簡單性、可測試性和鬆耦合的角度而言,任何 Java 應用都可以從 Spring 框架中受益。Spring 框架的核心是控制反轉(IoC)和麪向切面(AOP)。簡單來說,Spring 框架是一個分層的面向與 Java 應用的一站式輕量級開源框架。

Spring 框架前身,是 Rod Johnson 發表在 Expert One-on-One J2EE Design and Development 一書中所包含的3萬行代碼的附件。在書中,他展示瞭如何在不使用 EJB 的情況下構建高質量、可擴展的在線座位預留應用程序。爲了構建該應用程序,他寫了超過萬行的基礎結構代碼。這些代碼包含了許多可重用的 Java 接口和類,如 ApplicationContext 和 BeanFactory 等。由於 Java 接口是依賴注入的基本構件,因此他將類的根包命名爲com.interface21,意思是這是一個提供給21世紀的參考!根據書中描述,這些代碼已經在一些真實的金融系統中使用。

由於該書影響甚廣,當時有幾個開發人員 Juergen Hoeller 以及 Yann Caroff 聯繫上了 Rod Johnson,希望將com.interface21代碼開源。Yann Caroff 將這個新框架並命名爲了“Spring”,意思是就像一縷春風掃平傳統 J2EE 的惡冬。所以說,Rod Johnson、Juergen Hoeller 以及 Yann Caroff 是 Spring 框架的共同創立者。

2003年2月,Spring 0.9 發佈,採用了 Apache 2.0 開源協議。2004年4月,Spring 1.0 發佈。到如今,Spring 框架已經是第5個主要版本了。

廣義上的 Spring——Spring 技術棧

廣義上的 Spring 是指以 Spring 框架爲核心的 Spring 技術棧。這些技術棧涵蓋了從企業級應用到雲計算等各個方面的內容。包括:

  • Spring Data:Spring 框架中的數據訪問模塊對 JDBC 及 ORM 提供了很好的支持。隨着 NoSQL 和大數據的興起,出現了越來越多的新技術,比如非關係型數據庫、MapReduce 框架。Spring Data 正是爲了讓 Spring 開發者能更方便地使用這些新技術而誕生的“大”項目——它由一系列小的項目組成——分別爲不同的技術提供支持,例如 Spring Data JPA、Sprng Data Hadoop、Spring Data MongoDB、Spring Data Redis 等等。通過 Spring Data,開發者可以用 Spring 提供的相對一致的方式來訪問位於不同類型的數據存儲中的數據。
  • Spring Batch:一款專門針對企業級系統中的日常批處理任務的輕量級框架,能夠幫助開發者方便地開發出強壯、高效的批處理應用程序。通過 Spring Batch 可以輕鬆構建出輕量級的、健壯的並⾏處理應用,並支持事務、併發、流程、監控、縱向和橫向擴展,提供統⼀的接口管理和任務管理。Spring Batch 對批處理任務進行了一定的抽象,它的架構可以大致分爲三層,自上而下分別是業務邏輯層、批處理執行環境層和基礎設施層。Spring Batch 可以很好地利用 Spring 框架所帶來的各種便利,同時也爲開發者提供了相對熟悉的開發體驗。
  • Spring Integration:在企業軟件開發過程中,經常會遇到需要與外部系統集成的情況,這時可能會使用 EJB、RMI、JMS 等各種技術,也許你會引入ESB。如果你在開發時用了 Spring 框架,那麼不妨考慮下 Spring Integration——它爲 Spring 編程模型提供了一個支持企業集成模式的擴展,在應用程序中提供輕量級的消息機制,可以通過聲明式的適配器與外部系統進行集成。Spring Integraton 中有幾個基本的概念:Message(帶有元數據的Java對象)、Channel(傳遞消息的管道)和Message Endpoint(消息的處理端)。在處理端可以對消息進行轉換、路由、過濾、拆分、聚合等操作;更重要的是可以使用 Channel Adapter,這是應用程序與外界交互的地方,輸入是 Inbound、輸出則是 Outbound,可選的連接類型有很多,比如 AMQP、JDBC、Web Services、FTP、JMS、XMPP、多種 NoSQL 數據庫等。只需通過簡單的配置文件就能將所有這些東西串聯在一起,實現複雜的集成工作。
  • Spring Security:前身是 Acegi,是較爲成熟的子項目之一,是一款可定製化的身份驗證和訪問控制框架。讀者朋友如果對該技術有興趣,可以參閱筆者所著的開源書《Spring Security 教程》(https://github.com/waylau/spring-security-tutorial)以瞭解更多 Spring Security 方面的內容。
  • Spring Mobile:對 Spring MVC 的擴展,旨在簡化移動 Web 應用的開發。
  • Spring for Android:用於簡化 Android 原生應用程序開發的 Spring 擴展。
  • Spring Boot:是 Spring 團隊提供的全新框架,其設計目的是用來簡化新 Spring 應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。Spring Boot 爲 Spring 平臺及第三方庫提供開箱即用的設置,這樣你就可以有條不紊地來進行應用的開發。多數 Spring Boot 應用只需要很少的 Spring 配置。通過這種方式,Spring Boot 致力於在蓬勃發展的快速應用開發領域成爲領導者。讀者朋友如果對該技術有興趣,可以參閱筆者所著的開源書《Spring Boot 教程》(https://github.com/waylau/spring-boot-tutorial)是瞭解更多 Spring Boot 方面的內容。本書的“第25章 Spring Boot”也會對 Spring Boot 做深入的探討。
  • Spring Cloud:使用 Spring Cloud,開發人員可以開箱即用的實現分佈式系統中常用的服務。這些服務可以任何環境下運行,包括分佈式環境,也包括開發人員自己的筆記本電腦、裸機數據中心,以及 Cloud Foundry 等託管平臺。Spring Cloud 基於 Spring Boot 來進行構建服務,並可以輕鬆地集成第三方類庫,來增強應用程序的行爲。讀者如果對該技術有興趣,可以參閱筆者所著的開源書《Spring Cloud 教程》(https://github.com/waylau/spring-cloud-tutorial)是瞭解更多 Spring Cloud 方面的內容。本書的“第26章 Spring Cloud”也會對 Spring Cloud 做深入的探討。
  • ......

Spring 的技術棧還有很多,讀者朋友有興趣的話,可以訪問筆者所著的“Spring 5案例大全”項目(<https://github.com/waylau/spring-5-book)瞭解更多信息。

約定

由於 Spring 是早期 Spring 框架的總稱,所以,有時候這個“Spring”這個命名會給讀者產生困擾。一般地,我們約定“Spring 框架”特指是狹義上的 Spring,即 Spring Framework;而“Spring”特指是廣義上的 Spring,泛指 Spring 技術棧。

參考引用

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