為什麼說 Java 程式員到了必須掌握 Spring Boot 的時候?

来源:https://www.cnblogs.com/lfs2640666960/archive/2018/06/05/9142409.html
-Advertisement-
Play Games

Spring Boot 2.0 的推出又激起了一陣學習 Spring Boot 熱,就單從我個人的博客的訪問量大幅增加就可以感受到大家對學習 Spring Boot 的熱情,那麼在這麼多人熱衷於學習 Spring Boot 之時,我們自己也在思考: Spring Boot 為什麼帶來了這麼大的變革。 ...


Spring Boot 2.0 的推出又激起了一陣學習 Spring Boot 熱,就單從我個人的博客的訪問量大幅增加就可以感受到大家對學習 Spring Boot 的熱情,那麼在這麼多人熱衷於學習 Spring Boot 之時,我們自己也在思考: Spring Boot 為什麼帶來了這麼大的變革。它誕生的背景是什麼?Spring 企業又是基於什麼樣的考慮創建的 Spring Boot? 傳統企業使用 Spring Boot 會給我們帶來什麼樣變化。

 

Spring 框架可以說是 Java 開發人員使用的最流行的應用程式開發框架之一。它目前由大量提供一系列服務的模塊組成。包括模塊容器,為構建橫切關註點提供支持的面向切麵編程(AOP),安全框架,數據存取框架,Web 應用框架和用於模塊測試提供支持的類。Spring 框架的所有組件都通過依賴註入粘在一起。依賴註入(也稱為控制反轉)使設計和測試鬆散耦合的軟體模塊變得更容易。

多年來 Spring 框架已變得足夠成熟。幾乎所有 Java 企業應用需要用到的基礎組件都可以在 Spring 框架中找到。但在一個新應用中將所有需要的 Spring 組件整合併配置好並不容易。這包括在 gradle/maven 中設置依賴庫,使用 xml、註解或 java 代碼配置需要的 Spring Bean。Spring 開發者意識到這裡的絕大多數工作是可以可以自動化的,Spring Boot 出現了!

 

Spring 框架的歷史

起點

2002 年 10 月,Rod Johnson 撰寫了一本名為 Expert One-on-One J2EE 設計和開發的書。本書由 Wrox出版,介紹了當時 Java 企業應用程式開發的情況,並指出了 Java EE 和 EJB 組件框架中的存在的一些主要缺陷。在這本書中,他提出了一個基於普通 Java 類和依賴註入的更簡單的解決方案。

在書中,他展示瞭如何在不使用 EJB 的情況下構建高質量,可擴展的線上座位預留系統。為了構建應用程式,他編寫了超過 30,000 行的基礎結構代碼。包含許多可重用的 Java 介面和類,如 ApplicationContext和BeanFactory。由於java介面是依賴註入的基本構建塊,因此他將這些類的根包命名為com.interface21。

一對一的 J2EE 設計和開發一炮而紅。本書免費提供的大部分基礎架構代碼都是高度可重用的。即使在 15 年後,本書及其原則仍然與構建高質量的 Java Web 應用程式相關。

Spring 誕生

在本書發佈後不久,開發者 Juergen Hoeller 和 Yann Caroff 說服 Rod Johnson 創建一個基於基礎結構代碼的開源項目。Rod,Juergen 和 Yann 於 2003 年 2 月左右開始合作開發該項目 。Yann 為新框架創造了“Spring”的名字。據 Rod 介紹,Spring 是傳統 J2EE 的新開始。

200 年 6 月,Spring 2.0 在 Apache 2.0 許可下發佈。2004 年 3 月,1.0 版發佈。有趣的是,在1.0發佈之前,spring 就被開發人員廣泛採用。2004 年 8 月,Rod Johnson,Juergen Hoeller,Keith Donald 和Colin Sampaleanu 共同創立了一家專註於 Spring 咨詢,培訓和支持的公司 interface21。

Yann Caroff 在早期離開了團隊,Rod Johnson 在 2012 年離開,Juergen Hoeller 仍然是 Spring 開發團隊的積極成員。

Spring 框架的快速增長

自 2004 年 1.0 版本發佈以來,Spring 框架迅速發展。Spring 2.0 於 2006 年 10 月發佈,到那時,Spring的下載量超過了 100 萬。Spring 2.0 具有可擴展的 XML 配置功能,用於簡化 XML 配置,支持 Java 5,額外的 IoC 容器擴展點,支持動態語言。

在 Rod 領導下管理 Interface21 項目於 2007 年 11 月更名為 SpringSource。同時發佈了 Spring 2.5。Spring 2.5 中的主要新功能包括支持 Java 6 / Java EE 5,支持註釋配置,classpath 中的組件自動檢測和相容 OSGi 的 bundle。

2007 年,SpringSource 從基準資本獲得了 A 輪融資(1000萬美元)。SpringSource 在此期間收購了多家公司,如Hyperic,G2One 等。2009年8月,SpringSource 以 4.2 億美元被 VMWare 收購。SpringSource 在幾周內收購了雲代工廠,這是一家雲 PaaS 提供商。2015 年,雲代工廠轉型成了非營利雲代工廠。

2009 年 12 月,Spring 3.0 發佈。Spring 3.0 具有許多重要特性,如重組模塊系統,支持 Spring 表達式語言,基於 Java 的 bean 配置(JavaConfig),支持嵌入式資料庫(如 HSQL,H2 和 Derby),模型驗證/ REST 支持和對 Java EE 的支持。

2011 年和 2012 年發佈了許多 3.x 系列的小版本。2012 年 7 月,Rod Johnson 離開了團隊。2013 年 4月,VMware 和 EMC 通過 GE 投資創建了一家名為 Pivotal 的合資企業。所有的 Spring 應用項目都轉移到了 Pivotal。

2013 年 12 月,Pivotal 宣佈發佈 Spring 框架 4.0。Spring 4.0 是 Spring 框架的一大進步,它包含了對Java 8 的全面支持,更高的第三方庫依賴性(groovy 1.8+,ehcache 2.1+,hibernate 3.6+等),Java EE 7 支持,groovy DSL for bean 定義,對 websockets 的支持以及對泛型類型的支持作為註入 bean 的限定符。

2014 年至 2017 年期間發佈了許多 Spring 框架 4.xx 系列版本。Spring 4.3.7 於 2017 年 3 月發佈。Spring 4.3.8 於 2017 年 4 月發佈,併成為 4.x 系列中的最後一個。Spring 框架的下一個延續的主要版本是在 5.0 版本展開。

Spring Boot 的歷史

2012 年 10 月,Mike Youngstrom 在 Spring jira 中創建了一個功能請求  要求在 Spring 框架中支持無容器 Web 應用程式體繫結構。他談到了在主容器引導 spring 容器內配置 Web 容器服務。這是 jira 請求的摘錄:

我認為 Spring 的 Web 應用體繫結構可以大大簡化,如果它提供了從上到下利用 Spring 組件和配置模型的工具和參考體繫結構。在簡單的 main()方法引導的 Spring 容器內嵌入和統一這些常用Web 容器服務的配置。

這一要求促使了 2013 年初開始的 Spring Boot 項目的研發。2014 年 4 月,Spring Boot 1.0.0 發佈。從那以後,一些 Spring Boot 版本出來了:

  • Spring boot 1.1(2014 年 6 月) - 改進的模板支持,gemfire 支持,elasticsearch 和 apache solr 的自動配置。

  • Spring Boot 1.2(2015 年 3 月) - 升級到 servlet 3.1 / tomcat 8 / jetty 9,spring 4.1 升級,支持 banner / jms / SpringBootApplication 註解。

  • Spring Boot 1.3(2016 年 12 月) - Spring 4.2 升級,新的 spring-boot-devtools,用於緩存技術(ehcache,hazelcast,redis 和 infinispan)的自動配置以及完全可執行的 jar 支持。

  • Spring boot 1.4(2017年1月) - spring 4.3 升級,支持 couchbase / neo4j,分析啟動失敗和RestTemplateBuilder。

  • Spring boot 1.5(2017年2月) - 支持 kafka / ldap,第三方庫升級,棄用 CRaSH 支持和執行器記錄器端點以動態修改應用程式日誌級別。

  • Spring boot 2.0(2018 年 03 月)-基於 Java 8,支持 Java 9,支持 Quartz ,調度程式大大簡化了安全自動配置,支持嵌入式 Netty

Spring Boot 簡單性使 java 開發人員能夠快速大規模地採用該項目。Spring Boot 可以說是在 Java 中開發基於 REST 的微服務 Web 應用程式的最快方法之一。。

Spring IO 和 Spring Boot

2014 年 6 月,Spring io 1.0.0 發佈。Spring io 代表應用程式庫之間的一組預定義的依賴關係。這意味著如果使用特定的 Spring IO 版本創建項目,則不再需要定義庫的版本。即使是 Spring Boot 啟動項目也是這個 Spring IO 的一部分。例如,如果你使用的是 spring io 1.0.0,則在添加啟動器項目的依賴關係時,不需要指定 spring 啟動版本。它會自動假定它是spring boot 1.1.1.RELEASE。

概念上,spring io 由模塊的基礎層和執行層域特定的運行時(DSR)組成。基礎層代表核心彈簧模塊和第三方依賴關係的策劃清單。Spring Boot 是 Spring IO 提供的執行層 DSR 之一。因此,現在有兩種主要的方法來構建應用程式,

  • 使用或不使用 spring io 直接使用 Spring Boot。

  • 使用所需 Spring 模塊的 Spring IO。

請註意,通常每當發佈新的 Spring 框架版本時,都會觸發新的 Spring 啟動版本。這將反過來引發新的Spring Boot 版本。

2015 年 11 月,Spring io 2.0.0 發佈。這提供了一套更新的依賴項,包括 Spring Boot 1.3。2016 年 7月,Spring io 團隊決定使用按字母順序排版的方案。Spring IO 為此使用城市名稱。在字母版本方案中,新名稱表示依賴庫的次要和主要升級。

2016 年 9 月,雅典發佈了首個按字母順序排列的城市命名的 Spring io 平臺版本。它包含 Spring Boot 1.4 和其他第三方庫升級。此後,雅典發佈了多個服務版本(SR1,SR2,SR3和SR4)。

2017 年 3 月,最新的 Spring io平臺(Brussels-SR1)發佈。它使用最新的 Spring Boot 版本 1.5.2。下一個 Spring io 平臺是開羅計劃推出的 spring boot 2.0 和 spring framework 5.0。

Spring 時間線圖表

 

 

微服務技術是程式員繞不開的話題,在這裡也順便給大家推薦一個架構交流學習群:650385180,裡面會分享一些資深架構師錄製的視頻錄像:有Spring,MyBatis,Netty源碼分析,高併發、高性能、分散式、微服務架構的原理,JVM性能優化這些成為架構師必備的知識體系。還能領取免費的學習資源,以下的課程體系圖也是在群里獲取。相信對於已經工作和遇到技術瓶頸的碼友,在這個群里一定有你需要的內容。

有人說,Spring Boot的出現,讓Java迎來了又一春,它是Java應用開發的顛覆者,徹底改變了Java應用開發的模式。

以往我們做Spring應用開發,要知道配置哪些類來讓Hibernate和Spring一起工作,要知道如何配置view resolver來控制哪個模版進行視圖層的展示。經常寫了一大堆代碼之後發現只是在處理Spring框架本身的配置,根本一行業務邏輯都沒有寫。

開發完成之後,我們還要考慮部署的問題,且不說部署到非常笨重的應用伺服器,比如WebSphere, Weblogic或者JBoss,即使部署到Tomcat或者Jetty這種輕量級容器上面,我們要知道如何配置容器,如何修改配置文件等等。而且在多應用部署到同一個Tomcat的時候,經常會出現衝突。就算我們花了很大力氣解決了這些問題,程式部署成功之後,我們很難去瞭解這個程式的運行狀態。有可能我們要配置很多第三方工具來去知道這個應用程式運行狀態如何,有哪些參數,環境變數是什麼。儘管Spring幫我們解決了依賴註入的問題,簡化了一些MVC的流程,但是Spring框架本身集成了越來越多東西,導致其越來越難配置,維護成本成直線上升。

很多時候,Python, Ruby或者JavaScript程式員敲幾個命令安裝一些庫,然後簡單的敲幾行代碼,引入一些框架比如flask,然後直接一個簡單的API就可以跑起來了。Java程式員可能還在研究該使用Maven裡面的哪個庫,如何在代碼裡面進行配置。

但是現在 Spring Boot的出現讓這一情況有了很大的改觀。

它使用“習慣優於配置”(項目中存在大量的配置,此外還內置一個習慣性的配置,讓你無須手動進行配置)的理念讓你的項目快速運行起來。使用Spring Boot 很容易創建一個獨立運行(運行jar,內嵌Servlet 容器)、準生產級別的基於Spring框架的項目,使用Spring Boot 你可以不用或者只需要很少的Spring 配置。

【Spring Boot 核心功能】

  • 獨立運行的Spring 項目

Spring Boot 可以以jar 包的形式獨立運行,運行一個Spring Boot 項目只需通過java –jarxx.jar 來運行。

  • 內嵌Servlet 容器

Spring Boot 可選擇內嵌Tomcat、Jetty 或者Undertow ,這樣我們無須以war 包形式部署項目。

  • 提供starter 簡化Maven 配置

Spring 提供了一系列的starter pom 來簡化Maven 的依賴載入,例如,當你使用了spring-boot-starter-web 時,會自動加入如下圖所示的依賴包。

  • 自動配置Spring

Spring Boot 會根據在類路徑中的jar 包、類,為jar 包里的類自動配置Bean,這樣會極大地減少我們要使用的配置。當然,Spring Boot 只是考慮了大多數的開發場景,並不是所有的場景,若在實際開發中我們需要自動配置Bean,而Spring Boot 沒有提供支持,則可以自定義自動配置。

  • 準生產的應用監控

Spring Boot 提供基於http、ssh、telnet 對運行時的項目進行監控。

  • 無代碼生成和xml 配置

Spring Boot 的神奇的不是藉助於代碼生成來實現的,而是通過條件註解來實現的,這是Spring 4.x 提供的新特性。

Spring 4.x 提倡使用Java 配置和註解配置組合,而Spring Boot 不需要任何xml 配置即可實現Spring 的所有配置。

SpringBoot 不僅讓我們做Java開發變的簡單有效,更重要的是SpringBoot徹底顛覆了我們對Java開發的認識,讓我們第一次有了”原來Java開發可以這麼做” 的感覺。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 分頁對於大多數網站來說是必不可少的,那你使用restful架構時候,你可以從後臺獲取數據,在前端利用利用框架或自定義分頁,這是一種解決方案。當然django rest framework提供了分頁組件,讓我們可以更靈活的進行分頁。 django rest framework提供了三種分頁組件: Pa ...
  • 本文通過一個簡易安全認證示例的開發實踐,理解過濾器和攔截器的工作原理。 很多文章都將過濾器(Filter)、攔截器(Interceptor)和監聽器(Listener)這三者和Spring關聯起來講解,並認為過濾器(Filter)、攔截器(Interceptor)和監聽器(Listener)是Spr ...
  • 閱讀本文約“2分鐘” 熟悉Java的朋友都知道虛擬機還有編譯器,那麼它們各自主要的功能是什麼?誰比較重要呢?讓我們來瞭解一下這兩位美女的故事。 虛擬機可以說就是Java,她能讓程式運行起來。 但是編譯器卻能產生文件,畢竟java是直譯語言,如果需要一邊運行一邊解譯純文字是不能運行得快速的,而我們程式 ...
  • 5.1.cms後臺修改密碼功能完成 (1)新建app/forms.py (2)cms/forms.py (3)cms/views.py (4)新建static/common/zlajax,js (5)cms/js/resetpwd.js (6)cms/cmc_base.html (7)cms/cms ...
  • 一、動態代理 1.1、代理模式 什麼是代理模式及其作用? Proxy Pattern(即:代理模式),23種常用的面向對象軟體的設計模式之一。 代理模式的定義:為其他對象提供一種代理以控制對這個對象的訪問。 在某些情況下,一個對象不適合或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間 ...
  • 前言 從去年的3月份起我就在開始讀《Effective Java 第二版》,當然,我讀的是中文版的;可能是我理解能力還不行,對於書中的內容總是感覺理解困難;就拿第一章的內容「創建和銷毀對象」來說吧,這是我讀的次數最多的一章,想必原因大家也是明白的,每次我讀不下去的時候,我就從頭開始讀,所以,現在我對 ...
  • 1.首先安裝mysql 具體教程可以參考https://blog.csdn.net/zhouzezhou/article/details/52446608 註意安裝產品的時候記得選擇MySQL Connector C,如圖 2.安裝好mysql之後,就開始配置,點擊項目->點擊項目屬性,如圖: 3. ...
  • 也許是最近模擬題打多了的緣故,我發現自己漸漸變得比較毒瘤起來,當然這也是有一定的好處的,因為從中我也學到了一些處理字元串的正確姿勢,今天我們就來講一 講如何用函數getline來讀入一整行字元串進行處理。或者他的一些變體。 首先我們先需要知道為什麼我們要學習這個函數,是這樣的,相信大家都應該知道以前 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...