爲何說 Java 程序員到了必須掌握 Spring Boot 的時候?


Spring Boot 2.0 的推出又激起了一陣學習 Spring Boot 熱,就單從我我的的博客的訪問量大幅增長就能夠感覺到你們對學習 Spring Boot 的熱情,那麼在這麼多人熱衷於學習 Spring Boot 之時,咱們本身也在思考: Spring Boot 爲何帶來了這麼大的變革。它誕生的背景是什麼?Spring 企業又是基於什麼樣的考慮建立的 Spring Boot? 傳統企業使用 Spring Boot 會給咱們帶來什麼樣變化。java

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

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

Spring 框架的歷史

起點

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

在書中,他展現瞭如何在不使用 EJB 的狀況下構建高質量,可擴展的在線座位預留系統。爲了構建應用程序,他編寫了超過 30,000 行的基礎結構代碼。包含許多可重用的 Java 接口和類,如 ApplicationContext和BeanFactory。因爲java接口是依賴注入的基本構建塊,所以他將這些類的根包命名爲com.interface21。spring

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

Spring 誕生

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

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 開發團隊的積極成員。flask

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開發能夠這麼作」 的感受。

相關文章
相關標籤/搜索