作Java開發的人一提起Spring,首先在腦海中浮現出的就是「IoC」,「AOP」,「Spring MVC」,「Spring Security」等等這些名詞,甚至大有「無Spring不Java」的感慨。
實際上,時至今日Spring已再也不是一個簡單的編程框架了,從最初的「SSH框架」發展到今天,Struts和Hibernate都幾乎快要從程序員視野中消失了,而Spring卻發展成了一個很是龐大且完整的生態。
因此說,除非特別指明是Spring生態中的某個具體框架,不然提起「Spring」應該指的是整個Spring生態。
說句不誇張的話,Java程序員只要精通了Spring,也就掌握了Java開發的精髓。html
在整個Spring生態中包含了許多應用在特定場景的具體框架,如:「Spring Framework」,「Spring Security」,「Spring Boot」,「Spring Cloud」等等,其中「Spring Framework」框架是整個生態的核心基礎,其餘框架都須要依賴「Spring Framework」提供的基礎功能,並且每一個框架都有本身獨立的代碼倉庫。java
Spring生態下的項目分爲3類:主要項目(Main Projects),社區項目(Community Projects),已經終止可是目前還保留的項目(Projects in the Attic)。
最新的Spring生態項目列表詳見:https://spring.io/projects 。git
目前,Spring生態中包含22個主要活躍的項目。
程序員
1.Spring Frameworkgithub
Spring Framework項目是整個Spring生態的基礎,包含了Spring最核心的功能,如:IoC,AOP,Spring MVC等,其餘項目都須要依賴Spring Framework。
另外,還須要注意的是Spring Framework項目又包含多個子模塊,如:spring-core,spring-beans,spring-context,spring-aop,spring-web,spring-webmvc等等。實際上,Spring Framework項目是一個模塊化的架構,各模塊之間又存在依賴關係。咱們在Java Web後臺項目中使用得最多的Spring MVC實際上就是模塊spring-webmvc,它與其餘模塊的依賴關係以下所示:
web
顯然,spring-webmvc
模塊依賴spring-context
,spring-aop
和spring-web
。
redis
2.Spring Bootspring
Spring Boot是一個開發基於Spring的腳手架項目,它默認集成了嵌入式Tomcat,配置註解化,支持快速集成第三方開發組件(如MyBatis),大大下降了使用Spring的門檻,並且內置了許多能夠直接用於生產環境的功能,是目前用於開發微服務架構項目的不二選擇。
值得注意的是: 許多人剛接觸Spring Boot的人把它神話了,當然使用Spring Boot能快速開發一個健壯的、可直接運行的項目,可是它的核心和基礎來源於Spring Framework。對於重度依賴Spring的開發人員,應該先去吃透Spring Framework,只要真正掌握了Spring Framework中各個模塊的實現原理,對於在實際開發中使用Spring Boot遇到的問題也就迎刃而解了。shell
3.Spring Cloud數據庫
Spring Cloud爲開發基於微服務架構的軟件系統提供了一整套工具集合,其中包含了開發各個微服務組件的具體項目,如:Spring Cloud Config(配置中心),Spring Cloud Netflix(服務註冊中心),Spring Cloud Sleuth(服務調用監控),Spring Cloud Gateway(服務網關)等等。
Spring Cloud的基礎是Spring Boot,基於Spring Boot能夠大大簡化開發各微服務組件的流程。
4.Spring Cloud Data Flow
Spring Cloud Data Flow用於構建在雲環境或K8S中基於微服務的實時或批數據處理架構,具體來說就是支持一系列須要進行數據處理的場景,如:ETL,數據導入/導出,事件流,預測分析等等。
5.Spring Data
Spring Data旨在提供一套基於Spring編程模型的數據訪問API,是一個數據訪問框架集合,其中包含了多個具體的支持不一樣方式訪問特定數據庫類型的子模塊,如:Spring Data JDBC(使用JDBC方式訪問關係型數據庫),Spring Data MongoDB(訪問MongoDB數據庫)等。
這個模塊的功能相似於MyBatis這樣的專門的ORM框架,在實際開發中能夠根據需求進行靈活選擇。
6.Spring Integration
Spring Integration的目的是提供一個簡單的模型,用於構建企業級應用集成解決方案。
7.Spring Batch
Spring Batch是一個輕量級的批處理框架,旨在開發對企業系統平常運營相當重要的強大批處理應用程序。
支持事務管理,提供了基於Web的管理接口。
8.Spring Security
Spring Security是用於實現認證和受權,以及訪問控制的安全框架,在Java生態與之提供相似的功能還有一個框架:Apache Shiro。
Spring Security依賴於Spring Framework,也就是說若是要Spring Security,那麼應用架構也必須是基於Spring Framework的,這大大限制了Spring Security的使用場景;反之,Shiro就沒有這樣限制,並且從項目架構上Shiro更加簡潔。固然,Spring Security提供了很是豐富的安全控制的功能,在某些方面甚至比Shiro更加完善,與之對應的是掌握的Spring Security的複雜度比較大。所以,對於在應用中是否選擇Spring Security須要根據實際需求來決定。
9.Spring HATEOAS
若是Web應用基於Spring框架(即:使用了Spring MVC)開發,那麼能夠直接使用Spring HATEOAS
來開發知足HATEOAS
約束的RESTFul服務。
這裏須要理解一個單詞簡寫:「HATEOAS」。HATEOAS(Hypermedia as the engine of application state)是REST架構風格中最複雜的約束,也是構建成熟REST服務的核心。它的重要性在於打破了客戶端和服務器之間嚴格的契約,使得客戶端能夠更加智能和自適應,而 REST 服務自己的演化和更新也變得更加容易。
10.Spring REST Docs
Spring REST Docs是一個文檔工具,用於爲REST架構風格的Web服務自動生成相應的文檔,這樣能夠解放開發者專門撰寫API文檔的工做。
11.Spring AMQP
Spring AMQP項目旨在將核心的Spring概念應用於基於AMQP的消息傳遞解決方案的開發中,它提供了一個「模板」的抽象用於發送和接收消息。
12.Spring Mobile
Spring Mobile是對Spring MVC的擴展,旨在簡化移動Web應用的開發。
Spring Mobile能夠檢測出當前請求使用的設備是PC、仍是手機或者是平板以及用戶設備是安卓平臺仍是iOS平臺,而後根據請求設備的不一樣,返回適合該設備的視圖。
13.Spring For Android
雖然官方的說法是Spring For Android旨在簡化原聲Android應用的開發,但其實這個有點太過於牽強。
Spring For Android提供了2個對原生Android應用開發的支持:
(1)提供了一個REST客戶端
(2)支持訪問安全API時的認證
14.Spring Web Flow
Spring Web Flow主要應用於須要在Web頁面上建立引導用戶執行相似「下一步」這樣的基於流程的應用場景,該框架構建於Spring MVC之上。
15.Spring Web Services
Spring Web Services用於開發WebService服務,相似的框架如:Apache CXF,Apache Axis2。
16.Spring LDAP
Spring LDAP是一個工具,用於爲基於Spring的應用程序使用LDAP(Lightweight Directory Access Protocol)協議。
17.Spring Session
Spring Session提供了管理用戶Session信息的API和對應實現,Spring Session使得支持集羣會話變得簡單,而不依賴於特定於應用程序容器的解決方案。
簡單來說,傳統的Session方案依賴於特定的容器(如:Tomcat),Spring Session就是提供獨立於特定容器的Session解決方案。
其實,針對Tomcat容器,Session集羣化也有一個開源方案:tomcat-redis-session-manager。
18.Spring Shell
Spring Shell用於開發基於命令行交互的應用。
19.Spring FLO
Spring FLO是一個JavaScript類庫,是Spring Cloud Data Flow中流構建器的基礎。
20.Spring Kafka
Spring Kafka用於在Spring項目中與Kafka交互。
21.Spring Statemachine
Spring Statemachine是一個爲開發人員在Spring項目中使用狀態機的框架,幫助開發者簡化狀態機的開發過程,讓狀態機結構更加層次化。
22.Spring IO Platform
簡單來講,Spring IO Platform是一個對項目依賴進行統一版本管理的工具。本質就是一個pom文件,它記錄了Spring項目和其它第三方庫對應的版本信息。
社區項目目前只有2個:Spring ROO,Spring Scala。
1.Spring ROO:這是一個開發工具包,旨在快速構建一個Java應用。
2.Spring Scala:支持在Scala中使用Spring框架。
某些項目已經終止了,可是仍然保留着,沒必要贅述。
Spring是一個生態系統,提供許多有用的編程框架或工具集。
本文的目的不在於詳細介紹Spring生態的每個項目,而是經過一個全面的整理,對Spring生態有一個完整的認識,在實際中根據須要靈活選擇對應的組件來使用便可。
能夠明確的是,當下最爲流行的Spring項目是這4個:Spring Framework,Spring Security,Spring Boot,Spring Cloud。
以下圖所示,再次對Spring生態作一個歸納性總結。
【參考】
https://www.ibm.com/developerworks/cn/java/j-lo-SpringHATEOAS/index.html 使用 Spring HATEOAS 開發 REST 服務
https://www.jianshu.com/p/f9024eb3f252 使用Spring Mobile實現網站移動端適配及更換主題
http://www.javashuo.com/article/p-sdrubzti-ne.html Spring學習筆記之Spring Web Flow
https://www.hifreud.com/2015/02/27/08-spring-mvc-spring-web-service/ Spring 使用筆記之(五) - Spring-ws實現基於契約優先的WebService
https://www.ibm.com/developerworks/cn/web/wa-spring-session-architecture-and-design/index.html 詳解 Spring Session 架構與設計
https://www.ibm.com/developerworks/cn/java/spring-shell-application/index.html 使用 Spring Shell 開發 Java 命令行應用
http://blog.didispace.com/spring-statemachine/ 使用Spring StateMachine框架實現狀態機
https://www.jianshu.com/p/dd0baba45f52 Spring IO Platform 簡介
http://www.javashuo.com/article/p-hdaqpzoi-de.html Spring IO Platform項目的介紹和應用
http://www.javashuo.com/article/p-qrxoerfg-gp.html Spring IO Platform簡介及示例