JavaRush /Java Blog /Random-TW /關於 Spring 您需要了解的內容:歷史、關鍵模組、與 Java EE 的比較

關於 Spring 您需要了解的內容:歷史、關鍵模組、與 Java EE 的比較

在 Random-TW 群組發布
你好!目前,對於了解Java的開發人員來說,最受歡迎的開發方向是Web開發。當然,對於這個專業,需要學習一系列技術。主要的之一是Spring您可能會說您可以學習Java關於 Spring 您需要了解的內容:歷史、關鍵模組、與 Java EE 的比較 - 1 EE 。當然,這是事實,但現在絕大多數新專案都使用Spring,這使其幾乎成為 Java Web 開發人員預設的強制技術。如果你想跟上市場的需求,你必須研究它。今天我想談談Spring,即稍微擴展一下您對它的視野:談談它的創建歷史、與Java EE堆疊的主要區別,並簡要概述Spring堆疊的關鍵組件。讓我們開始吧! 關於 Spring 您需要了解的內容:歷史、關鍵模組、與 Java EE 的比較 - 2

1. Spring 是如何、何時出現的,以及隨著時間的推移它演變成了什麼

這一切都始於2002 年 10 月,當時 Rod Johnson 寫了《專家一對一 J2EE 設計與開發》一書: 關於 Spring 您需要了解的內容:歷史、關鍵模組、與 Java EE 的比較 - 3在這本由Wrox出版的書中,作者描述了當時企業Java 開發的狀態,並指出了一些問題和基於元件的(企業 Java Bean)EJBJava EE。同時,Rod Johnson 提出了一個基於常規 Java 類別(POJO - 普通的舊 Java 物件)和依賴注入的更簡單的解決方案。在書中,他解釋瞭如何在不使用 EJB 的情況下創建高品質、可擴展的線上預訂應用程式。那些。他清楚地演示瞭如何消除應用程式開發的複雜性,並使使用簡單的 JavaBean 實作以前只能使用 EJB 才能實現的一切成為可能。然而, Spring的範圍並不限於開發運行在伺服器端的軟體元件。任何 Java 應用程式都可以利用該框架在簡單性、可測試性和鬆散耦合方面的優勢。他的J2EE開發設計一炮而紅。作為本書的一部分免費提供的大部分應用程式程式碼都是可重用的,許多開發人員很快就開始在他們的專案中使用它。Wrox 有一個該書的網頁,其中包含原始碼和補丁。他們還為這本書提供了一個線上論壇。2003 年 2 月,開發人員 Jürgen Heller 和 Jann Karoff 說服 Rod Johnson 創建一個基於該框架程式碼的開源專案。從那一刻起,Rod、Jurgen 和 Yann 開始合作創造全新的東西。事實上,是 Yann Karoff 為新框架想出了「Spring」這個名字。這裡的意思是Spring就像春天:傳統J2EE的「冬天」之後的新開始。
  • 2003年6月,Spring 0.9在Apache 2.0許可下發布。
  • Spring 1.0 於 2004 年 3 月發布。有趣的是,即使在 Spring 1.0 發布之前,之前的 0.9 版本也很受歡迎並被廣泛採用。
  • 2004 年 8 月,Rod Johnson、Jürgen Heller、Keith Donald 和 Colin Sampaleanu 共同創立了interface21,這是一家 Spring 諮詢、培訓和支援公司。
  • 2006年10月:Spring 2.0發布,簡化了XML設定檔。
  • 2007年11月發布的Spring 2.5引入了註解配置。
  • 2012年12月發布的Spring 3.2引入了Java配置,支援Java 7、Hibernate 4、Servlet 3.0,同時也要求至少Java 1.5。
  • Yann Karoff 很早就離開了球隊。羅德約翰遜於 2012 年離開春季隊。Jürgen Heller 仍然是 Spring 開發團隊的活躍成員。
  • 2014 年發布的 Spring 4.0 新增了對 Java 8 的支援。
  • 同樣在 2014 年,Spring Boot 被引進世界。
  • Spring 5.0於2017年發布。像 Spring Boot 2.x 一樣,它支援 Spring 5。
  • 事實上,這就是我們最喜歡的框架變成我們現在所知的框架的原因。

2. Spring 與 Java EE

讓我們對 Web 開發人員的兩個關鍵Java堆疊進行一個小小的比較: SpringJava EE。 關於 Spring 您需要了解的內容:歷史、關鍵模組、與 Java EE 的比較 - 4
JavaEE
優點 缺陷
  • 用 Java EE 編寫的應用程式被認為更可靠、安全和可擴展
  • Java EE 是業界認可的 API 標準
  • 主要基於註解和CDI(上下文和依賴注入),就像Spring
  • 基於EJB容器和POJO的實現
  • JEE 可以很好地處理具有大量事務的複雜應用程式
  • 成功用於可擴展的整體應用程序
  • Java EE 有自己的 OOP 語言,包含特定的風格和文法
  • 非常複雜的應用程式開發環境,對於初學者來說很難理解(有時對於老年人來說也是如此)
  • 專案的最終成本,包括設計、部署和應用程式開發,可能會令人望而卻步
Java EE 由 Oracle 許可,專為需要廣泛適應性、可分散式環境來建立大眾市場應用程式的組織和公司而設計。與Spring 一樣,Java EE 包含用於資料庫存取(JDBC、JPA)、遠端工程呼叫(RMI)、資訊(JMS)、Web 管理、XML 處理的附加程式庫,並表徵了企業JavaBean、portlet、Servlet、Java Server Pages 的標準API, Java EE 的基本目標 關於 Spring 您需要了解的內容:歷史、關鍵模組、與 Java EE 的比較 - 5是解決開發人員在使用各種 API 建立目前應用程式時面臨的主要問題。同時,Java EE 中的開發具有很高的複雜性,這不僅對初學者來說也提高了門檻。對於經驗豐富的專家來說,要理解已經編寫的功能可能很困難,因此 Java EE 中的開發需要更長的時間,因此成本也更高。簡而言之,關於 Java EE,我們可以這樣說: 複雜,但靈活。 好吧,現在讓我們來談談Spring關於 Spring 您需要了解的內容:歷史、關鍵模組、與 Java EE 的比較 - 6
春天
優點 缺陷
  • 允許您有效地組織物件交互
  • 比 Java EE 簡單
  • 基於IOCAOP實現,保證應用的鬆散耦合
  • 基於 XML、Groovy 或註解配置工作
  • 允許您使用普通的舊 Java 物件 - POJO,開發人員不需要像應用程式伺服器這樣的企業容器
  • 為 Java 開發人員提供高水準的模組化
  • 提供 Java EE 庫的實現,但以自己的方式,使它們的使用更加容易
  • 開源許可證
  • Spring Boot 大大簡化了初始應用程式設置
  • Spring應用程式程式碼通常很容易測試
  • Spring開發起來比較困難,因為它缺乏明確的重點
  • 對於新的 Java 開發人員來說,學習 Spring 框架可能具有挑戰性(但仍然比 Java EE 更容易)
  • Spring 比 Java EE 慢
Spring 是一個針對大型企業的開源 Java 框架。Spring 框架旨在提供 J2EE 思想的最簡單實現,並透過擴展基於 POJO 的程式設計模型的功能來利用優秀的程式設計實踐。那些。Java EE更多的是一個官方標準,而Spring更多的是一個以自己的方式實現這個標準的框架。

比較結果

在我的理解中,Java EE 和 Spring 就像 JDBC 和 Hibernate,其中 JDBC 是一種更快的技術,但同時帶有許多不必要的程式碼。Hibernate 已經使用了 JDBC,但同時顯著簡化和減少了開發(儘管施加了一些限制)。不可能肯定地說它們哪個比較好。這也有點讓人想起這個問題:ArrayList 或 LinkedList 哪個比較好。畢竟,答案是一樣的——視情況而定。他們每個人都有自己的優點和缺點,你需要仔細選擇,權衡你的情況並了解他們中的哪一個現在會帶來最大的好處。 關於 Spring 您需要了解的內容:歷史、關鍵模組、與 Java EE 的比較 - 7

3. 彈簧組件

好吧,現在讓我們來談談組成 Spring 的框架。

Spring框架

它是為任何部署平台上基於 Java 的現代企業應用程式提供全面的程式設計和配置模型的核心模組。它包含了Spring的許多核心(core)技術:
  • core - 實現IoC(控制反轉)和 DI(依賴注入)概念的基本功能;
  • AOP - Aspect-Oriented Planning-面向方面編程,旨在實現端對端邏輯;
  • MVCWebFlux - Web 互動框架;
  • JDBCORM-與資料庫互動的技術;
  • 測試- 對 Spring 容器資料進行透明、簡單測試的功能;
  • SpEL - Spring Expression Language - Spring 表達式語言;
  • ETC。

春季啟動

透過最小化初始應用程式設定和自動配置 Spring 應用程式元素, 簡化基於Spring的應用程式的創建。5分鐘啟動Spring boot範例

春季數據

顯著簡化資料存取技術、關係和非關係資料庫的使用(刪除重複程式碼並簡化與資料的交互作用)。本文包含有關連接 Spring Data 的很好的教學。

春雲

它用於微服務架構中,簡化微服務之間的交互,並自動化在AWSAzure等雲端平台上部署應用程式。請參閱此處有關 Spring Cloud 的詳細教程,但我要警告您,該主題並不容易,並且針對的是接近高級水平的專家。

春季安全

為應用程式提供強大且可自訂的身份驗證(authentication)和存取控制(authorization)工具。您可以在這篇文章中找到一個將Spring Security連接到您的應用程式的簡單範例。 關於 Spring 您需要了解的內容:歷史、關鍵模組、與 Java EE 的比較 - 8

Spring GraphQL

此模組為基於 GraphQL Java 建置的 Spring 應用程式提供支援。 GraphQL是一種 API 查詢語言,允許客戶端查詢所需的有限資料集,從而允許在有限數量的查詢中收集資料。如果您已經熟悉 JPA,您可能已經接觸過 EntityGraph,它具有類似(或相同)的概念。您可以在此處閱讀有關 GraphQL 的更多資訊。

春季會議

Spring框架的這一部分提供了用於管理使用者會話資訊的API和實作(使用者會話資料儲存在持久性儲存中,如RedisMongoDbHazelCast等)。可以在此處找到使用Spring Session的範例。

彈簧集成

該模組旨在簡化基於 Spring 的應用程式中的消息傳遞,並支援透過聲明性適配器與外部系統整合。這些適配器提供了比 Spring 對遠端處理、訊息傳遞和調度的支援更高層級的抽象。 詳細文章

春季休息

提供了一組豐富的工具來簡化 REST API 開發:用於路由請求的工具、用於將 JSON/XML 轉換為所需類型的物件的工具等。可以在本資料中找到 Spring 中的 RESTful 服務的範例。

Spring Web 流程

Spring Web Flow 基於 Spring MVC,可讓您實作 Web 應用程式的「流」。此類流程封裝了指導使用者完成某些業務任務的一系列步驟。它們跨越多個 HTTP 請求,是有狀態的,可處理交易數據,可重複使用,本質上是動態且持久的。連接 Spring Web Flow 的範例可以在本英文指南中看到。

Spring網路服務

此模組旨在讓您能夠使用多種操作 XML 有效負載的方法之一來建立靈活的 Web 服務,從而更輕鬆地開發基於契約的 SOAP 服務。SOAP - 簡單物件存取協定 - 用於存取物件的簡單協定。

春天的仇恨

此模組提供了一些 API,以便在使用 Spring(尤其是 Spring MVC)時更輕鬆地建立遵循 HATEOAS 原則的 REST 控制器。 HATEOAS - 超媒體作為應用程式狀態的引擎 - 超媒體作為應用程式狀態的引擎。您可以在此處查看此Spring庫的使用。

春季批次

此模組提供批量資料處理功能(當資料進行大塊-批量處理時),這對於企業系統的日常運作至關重要。Spring Batch 提供了處理大量記錄所需的可重複使用功能,包括日誌記錄/追蹤、事務管理、作業處理統計、作業重新啟動、跳過和資源管理。您可以在此連結中找到有關 Spring Batch 的有趣評論。

春季 AMQP

此模組將核心 Spring 概念應用於基於 AMQP 的訊息傳遞解決方案的開發。它提供了一個模板作為發送和接收訊息的高級抽象。它還透過偵聽器容器提供對訊息驅動 POJO 的支援。 AMQP - Advanced Message Queuing Protocol - 高級訊息佇列協定。此專案包含兩個部分: spring-amqp 是基本抽象, spring-rabbit 是RabbitMQ的實作。 使用 Spring 的 RabbitMQ 連接範例 關於 Spring 您需要了解的內容:歷史、關鍵模組、與 Java EE 的比較 - 9

Apache Kafka 的 Spring

此專案將核心 Spring 概念應用於基於Kafka 的訊息傳遞解決方案的開發。提供模板作為發送訊息的高級抽象。它還透過必要的註釋和偵聽器容器為訊息驅動的 POJO 提供支援。這裡與 Spring AMQP 有明顯的相似之處,但該模組是專門針對 Kafka 進行修改的。連接 Spring Kafka 的範例可以在這裡查看。

春季信用中心

提供客戶端支持,用於從Cloud Foundry平台上運行的 CredHub 伺服器儲存、檢索和刪除憑證。 CredHub - 提供用於安全儲存、建立、檢索和刪除各種類型憑證的 API。Spring CredHub 為 CredHub API 提供了 Java 綁定,可以輕鬆地將 Spring 應用程式與 CredHub 整合。

春季弗洛

它是一個 JavaScript 程式庫,為管道提供簡單的 HTML5 嵌入式視覺化設計器和用於監控串流和批次資料的簡單圖形。該技術的演示位於連結的影片中

春季LDAP

該程式庫簡化了 LDAP 操作,並且基於 Spring JdbcTemplate。該框架允許搜尋和關閉上下文、查看結果、編碼/解碼值、過濾器等等(基於與 Spring Jdbc 相同的原理構建)。可以在此處找到 Spring LDAP 的範例實作。

春羅

該模組提供了一個 RAD 工具,可以建立和管理基於 Spring 的應用程式。其目標是提高 Java 開發人員的生產力。它無法編寫應用程式的業務邏輯,但可以處理配置和基礎設施內容。

彈簧殼

透過依賴 Spring Shell jar 並新增您自己的命令(作為 Spring bean 中的方法),該程式庫可以輕鬆建立功能齊全的 shell(也稱為命令列)應用程式。建立命令列應用程式可能很有用,例如,可以與專案的 REST API 互動或使用本機檔案內容。請閱讀此處此處的更多內容。

Spring狀態機

此模組允許應用程式開發人員在 Spring 應用程式中使用狀態機概念。使用此功能的詳細範例可以在此處此處找到。

彈簧穹頂

Spring Vault提供了熟悉的 Spring 抽象化和客戶端支援來存取、儲存和撤銷機密。它提供了與Vault互動的低階和進階抽象,使用戶擺脫了基礎設施的擔憂。 Spring Vault 實施範例 關於 Spring 您需要了解的內容:歷史、關鍵模組、與 Java EE 的比較 - 10“我需要學習所有這些嗎?” - 你驚訝地問。 別怕!這是錯誤的!更準確地說,不完全是這樣。這是 Spring 中可用技術的完整清單。初學者需要了解的技術列表要簡單得多:
  • 彈簧芯
  • 春季啟動
  • Spring Web(MVC 和 REST)
  • Spring 資料(Spring ORM、Spring JDBC、Spring JPA)
  • 彈簧測試
還有其他技術經常出現在專案中,但由於它們的複雜性,它們通常由更有經驗的開發人員而不是新手來處理。然而,對於初學者來說,至少對以下內容有一個大致的了解也很有用:
  • 春季安全
  • 春季AOP
  • 春雲
其他技術的使用頻率要低得多,因此您只需要認真研究它們即可從事特定專案。順便說一句,您可以在我的另一篇文章中找到Java 開發人員應該了解的完整清單。今天我就講到這裡,大家很快再見! 關於 Spring 您需要了解的內容:歷史、關鍵模組、與 Java EE 的比較 - 11
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION