揭秘 Java帝國的全能家族——Spring的成王之路

異步社區 發佈 2020-04-14T06:54:31+00:00

很久很久以前,古老的Java 編程帝國里降生了一個孩子,名為 Spring,它是 Java 帝國最小的王子,同時也是 Java 帝國期待已久的孩子。


很久很久以前,古老的 Java 編程帝國里降生了一個孩子,名為 Spring,它是 Java 帝國最小的王子,同時也是 Java 帝國期待已久的孩子。



它還有三個哥哥,分別是大哥 JSF、二哥 Struts 和三哥 Hibernate,它們一起為JAVA 帝國的編程事業添磚加瓦。


相比三個哥哥的術有術攻,促使 Spring 降生有兩個重要原因:

1、使 Java EE 開發更加容易;

2、解決企業應用開發的複雜性而創建,但又不僅限於伺服器端的開發,而是所有讓 Java 應用都可以從 Spring 中受益。


粉雕玉琢的 Spring 小王子備受 Java 帝國人民的喜愛,以往的需要幾個大王子一併合作的項目,Spring 小王子一個人便可完成,它讓開發變得更加簡單高效。



他是一個基於 POJO (簡單 Java 對象)的輕量級框架,最大的特點是其依賴注入方式,在 Spring 中創建 bean 和對象的職責交給了 Spring 框架來統一管理、完成和維護。


Spring 小王子的成長軌跡


2004年,Spring 1.0,徹底改變了開發企業級 Java 應用程式的方式。


2006年,Spring 2.0,在配置里使用自定義的XML命名空間,更小、更簡單易懂的配置文件讓Spring本身更便於使用。


2007年,Spring 2.5,面向註解的依賴注入模型(即@Component和@Autowired註解),以及面向註解的Spring MVC編程模型。不用再去顯式地聲明應用程式組件了,也不再需要去繼承某個基礎的控制器類了。


2009年,Spring 3.0,一套基於Java的全新配置,它能夠取代XML,一系列以@Enable開頭的註解進一步完善了這一特性,可以寫出一個沒有任何XML配置的Spring應用程式。


2013年,Spring 4.0,對條件化配置提供了支持,根據應用程式的Classpath、環境和其他因素,運行時決策將決定使用哪些配置,忽略哪些配置。那些決策再也不需要在構建時通過編寫腳本確定了(以前會把選好的配置放在部署的包里)。


2017年,Spring 5.0,主要功能是對反應式編程的支持,包括 Spring WebFlux。這是一個全新的反應式 Web 框架, 借鑑了 Spring MVC 的編程模型,允許開發人員創建伸縮性更好且耗用更少線程的 Web 應用程式。


從帶著使命感誕生到每個階段的成長,Spring 小王子為 Java 帝國奉獻了一切,從來沒有讓程式設計師們失望過。


Spring 小王子核心秘密武器


自誕生以來,Spring 小王子便鼓勵 Java 帝國的人民使用模塊化的方式進行編程,他使用一個核心容器和很多個其他的模塊來搭配,繼而滿足 Java 帝國建設各種各樣的需求。


核心容器


這是 Spring 框架最基礎的部分,它提供了依賴注入(DependencyInjection)特徵來實現容器對Bean的管理。這裡最基本的概念是 BeanFactory ,它是任何 Spring 應用的核心。

BeanFactory 是工廠模式的一個實現,它使用 IoC 將應用配置和依賴說明從實際的應用代碼中分離出來。


Spring核心容器包含了以下模塊:


應用上下文(Context)模塊


核心模塊的BeanFactory使Spring成為一個容器,而上下文模塊使它成為一個框架。這個模塊擴展了BeanFactory的概念,增加了對國際化(I18N)消息、事件傳播以及驗證的支持。

另外,這個模塊提供了許多企業服務,例如電子郵件、JNDI訪問、EJB集成、遠程以及時序調度(scheduling)服務。也包括了對模版框架例如Velocity和FreeMarker集成的支持。


Spring的AOP模塊


Spring在它的AOP模塊中提供了對面向切面編程的豐富支持。這個模塊是在Spring應用中實現切面編程的基礎。為了確保Spring與其它AOP框架的互用性,Spring的AOP支持基於AOP聯盟定義的API。

AOP聯盟是一個開源項目,它的目標是通過定義一組共同的接口和組件來促進AOP的使用以及不同的AOP實現之間的互用性。通過訪問他們的站點,你可以找到關於AOP聯盟的更多內容。

Spring的AOP模塊也將元數據編程引入了Spring。使用Spring的元數據支持,你可以為你的原始碼增加注釋,指示Spring在何處以及如何應用切面函數。


JDBC抽象和DAO模塊


使用JDBC經常導致大量的重複代碼,取得連接、創建語句、處理結果集,然後關閉連接。Spring的JDBC和DAO模塊抽取了這些重複代碼,因此你可以保持你的資料庫訪問代碼乾淨簡潔,並且可以防止因關閉資料庫資源失敗而引起的問題。

這個模塊還在幾種資料庫伺服器給出的錯誤消息之上建立了一個有意義的異常層。使你不用再試圖破譯神秘的私有的SQL錯誤消息!

另外,這個模塊還使用了Spring的AOP模塊為Spring應用中的對象提供了事務管理服務。


對象/關係映射集成模塊


對那些更喜歡使用對象/關係映射工具而不是直接使用JDBC的人,Spring提供了ORM模塊。Spring並不試圖實現它自己的ORM解決方案,而是為幾種流行的ORM框架提供了集成方案,包括Hibernate、JDO和iBATIS SQL映射。

Spring的事務管理支持這些ORM框架中的每一個也包括JDBC。


Spring的Web模塊


Web上下文模塊建立於應用上下文模塊之上,提供了一個適合於Web應用的上下文。另外,這個模塊還提供了一些面向服務支持。

例如:實現文件上傳的multipart請求,它也提供了Spring和其它Web框架的集成,比如Struts、WebWork。


Spring的MVC框架


Spring為構建Web應用提供了一個功能全面的MVC框架。雖然Spring可以很容易地與其它MVC框架集成,例如Struts,但Spring的MVC框架使用IoC對控制邏輯和業務對象提供了完全的分離。

它也允許你聲明性地將請求參數綁定到你的業務對象中,此外,Spring的MVC框架還可以利用Spring的任何其它服務,例如國際化信息與驗證。


如果作為一個整體,Spring 小王子的這些模塊已經為 Java 帝國提供了開發企業應用所需的一切,但 Java 人民可以自由地挑選適合自己的應用的模塊而忽略其餘的模塊,而不必將所有的模塊完全應用。


基於上面的這些核心模塊, Spring 小王子還提供了很多其他的有用的模塊,用於構建健壯的基於 Java 帝國的應用程式:

資料庫訪問模塊、事務管理模塊、安全模塊、Spring集成模塊、 批處理模塊、消息模塊、社交插件等。


Spring 小王子開枝散葉


經過多年發展, Spring 家族現在已枝繁葉茂,Spring 更是成為 Java 帝國生態系統中最主要的框架,其中Spring 5 的採用率約為 2/3。


家族的工作涵蓋了 Java 帝國的J2EE開發、依賴維護、安全批處理、統-資料庫訪問、大數據、消息處理、移動開發以及微服務等眾多領域。


在 Spring 小王子的孩子裡面,最耀眼的莫過於 Spring Framework 、 Spring Boot 和 Spring Cloud 這三個小輩。


Spring Framework

◆ 強大的基於 JavaBeans 的採用控制反轉(Inversion of Control,IoC)原則的配置管理,使得應用程式的組建更加快捷簡易;


◆ 一個可用於從 applet 到 Java EE 等不同運行環境的核心 Bean 工廠;


◆ 資料庫事務的一般化抽象層,允許插件式事務管理器,簡化事務的劃分使之與底層無關。


◆ 內建的針對 JTA 和 單個 JDBC 數據源的一般化策略,使 Spring 的事務支持不要求 Java EE 環境;


◆ JDBC 抽象層提供了有針對性的異常等級(不再從SQL異常中提取原始代碼),簡化了錯誤處理,大大減少了程式設計師的編碼量;


◆ 以資源容器,DAO 實現和事務策略等形式與 Hibernate,JDO 和 iBATIS SQL Maps 集成;


◆ 靈活的基於核心 Spring 功能的 MVC 網頁應用程式框架;


◆ 提供諸如事務管理等服務的面向方面編程框架。


Spring Framework 就像是 Spring 家族的樹根,使 Spring 家族得以在Java開發領域屹立不倒的根本原因,它的目標就是幫助 Java 帝國的開發人員開發出好的系統;


Spring Boot

◆ 可以創建獨立的Spring應用程式,並且基於其Maven或Gradle插件,可以創建可執行的JARs和WARs;


◆ 內嵌Tomcat或Jetty等Servlet容器;


◆ 提供自動配置的「starter」項目對象模型(POMS)以簡化Maven配置;


◆ 儘可能自動配置Spring容器;


◆ 提供準備好的特性,如指標、健康檢查和外部化配置;


◆ 絕對沒有代碼生成,不需要XML配置。


Spring Boot 相當於 Spring 家族的樹幹,它的目標是簡化新 Spring 應用的初始搭建以及開發過程,致力於在蓬勃發展的快速應用開發領域成為領導者;


Spring Cloud

◆ Spring Cloud Netflix:是對Netflix開發的一套分布式服務框架的封裝;


◆ Spring Cloud Config:將配置信息中央化保存, 配置Spring Cloud Bus可以實現動態修改配置文件;


◆ Spring Cloud Bus:分布式消息隊列,是對Kafka,MQ的封裝;


◆ Spring Cloud Security:對Spring Security的封裝,並能配合Netflix使用;


◆ Spring Cloud Zookeeper:對Zookeeper的封裝,使之能配置其它Spring Cloud的子項目使用;


◆ Spring Cloud Eureka:Spring Cloud Netflix 微服務套件中的一部分,它基於Netflix Eureka 做了二次封裝。


在近幾年中,Java 帝國多了一個流行的概念——微服務,帝國人民普遍認為它能解決傳統的單體架構應用所帶來的頑疾(如代碼維護難、部署不靈活、穩定性不高、無法快速擴展等等), 以至於湧現出了一大批幫助實現微服務的工具。


而在它們之中,Spring Cloud 無疑是最令人矚目的,不僅是因為 Spring 家族在 Java 帝國開發中的重要地位,更是因為 Spring Cloud 提供了一整套微服務實施方案 ,其中包括服務發現、分布式配置、客戶端負載均衡、服務容錯保護、API網關、安全、事件驅動、分布式服務跟蹤等工具,全面地解決了 Java 帝國人民在微服務開發領域所遇到的難點問題。


Spring Cloud 就如同是 Spring 家族這棵參天大樹在 Java 帝國的微服務開發領域所結出的碩果。


Spring 家族初心不變


Spring 家族之所以能夠在技術不斷更新換代的 IT 領域長盛不衰,並且引領技術發展的潮流,是因為它一直沒有偏離最初的目標——根據技術的發展,不斷優化和革新,讓 Java 應用的開發更加便利和高效


從XML配置、註解配置,再到Spring Boot的自動化配置,Spring 在不斷簡化,開發人員需要做的額外工作越來越少。


Spring 的這種基因代代相傳,在可以預見的未來,Spring 及其家族產品依然是值得花時間投資學習的技術。


Spring 小王子和它的孩子們,會一直陪伴在每個 Java 帝國人民的身邊,共同進步、共同成長。


Spring實戰 第5版


作者: [美]克雷格·沃斯(Craig Walls)

譯者: 張衛濱


本書是一本經典而實用的暢銷 Spring 學習指南。第5 版涵蓋了 Spring 5.0 和Spring Boot 2.0 里程碑式的更新。全書分為5 個部分,共19 章。第1 部分(第1~5 章)涵蓋了構建 Spring 應用的基礎話題。第2 部分(第6~9章)討論如何將Spring 應用與其他應用進行集成。第3 部分(第10~12 章)探討Spring對反應式編程提供的全新支持。第4 部分(第13~15 章)拆分單體應用模型,介紹SpringCloud 和微服務開發。第5 部分(第16~19 章)討論如何為應用投入生產環境做準備以及如何進行部署。


本書既適合剛開始學習Spring Boot 和Spring 框架的Java 開發人員快速上手,也適合經驗豐富的Spring 開發人員學習Spring 的新特性,尤其適用於企業級Java 開發人員。


Spring Cloud微服務和分布式系統實踐


作者: 楊開振


《Spring Cloud微服務和分布式系統實踐》從企業的真實需求出發,理論結合實際,深入講解Spring Cloud微服務和分布式系統的知識。


書中既包括Spring Cloud微服務的各類常用組件的講解,又包括分布式系統的常用知識的介紹。Spring Cloud組件方面主要講解服務註冊和服務發現(Eureka)、服務調用(Ribbon和OpenFeign)、斷路器(Hystrix和Resilience4j)、網關(Zuul和Gateway)、配置(Config)、全鏈路追蹤(Sleuth)、微服務的監控(Admin)等;分布式系統方面主要講解分布式資料庫、分布式緩存、會話和權限以及發號機制等。


本書的實踐部分通過Apache Thrift講解了遠程過程調用(RPC)在分布式系統中的應用,並且分析了處理高並發的一些常用方法,最後還通過一個簡單的實例講解了微服務系統的搭建。本書適合想要學習Spring Cloud微服務、分布式系統開發的各類Java開發人員閱讀,包括初學者和開發工程師。本書對架構師也有一定的幫助。


Spring學習指南 第4版

作者: [印度]J. 夏爾馬(J. Sharma)

阿西施·薩林(Ashish Sarin)

譯者: 周密


Spring 框架是以簡化J2EE 應用程式開發為特定目標而創建的,是當前最流行的Java 開發框架。本書主要介紹Beans 的配置、依賴注入、定製bean、基於Java 的容器、AOP、Spring Data、Spring MVC 等內容。


本書基於非常適合構建JavaWeb 微服務框架的Spring 5 編寫,涵蓋Java 的函數式編程、RxJava 2 的反應式編程、用Spring WebFlux、Spring Data 和Spring Security 開發反應式RESTful Web 服務等內容。本書適合Web 開發者和想使用Spring 的初學者參考,也可供對Web 開發和Spring 感興趣的讀者參考。


深入淺出Spring Boot 2.x


作者: 楊開振


Spring框架是Java EE開發的事實標準,而Spring Boot是業界最流行的微服務開發框架。


本書從一個最簡單的工程開始講解Spring Boot企業級開發,其內容包含全註解下的Spring IoC和AOP、資料庫編程、資料庫事務、NoSQL技術、Spring MVC、Spring 5新一代響應式框架WebFlux、REST風格和Spring Cloud分布式開發等。


Spring微服務實戰


作者: [美]約翰•卡內爾(John Carnell)

譯者: 陳文輝


本書以一個實際項目為主線,介紹雲、微服務等概念以及Spring Boot和Spring Cloud等諸多Spring項目,並介紹如何將該項目一步一步地從單體架構重構成微服務架構,最終將這個項目拆分成眾多微服務,讓它們運行在各自的Docker容器中,實現持續集成/持續部署,並最終自動部署到雲環境(亞馬遜雲)中。


Spring源碼深度解析 第2版


作者: 郝佳


本書從核心實現和企業應用兩個方面,由淺入深、由易到難地對Spring源碼展開了系統的講解,包括Spring的設計理念和整體架構、容器的基本實現、默認標籤的解析、自定義標籤的解析、bean的加載、容器的功能擴展、AOP、資料庫連接JDBC、整合MyBatis、事務、SpringMVC、遠程服務、Spring消息服務等內容。


-END-

關鍵字: