歡迎光臨
每天分享高質量文章

為什麼學習Spring Boot?

來自:https://blog.csdn.net/eson_15/article/details/81043834

作者:倪升武,,前華為軟體開發工程師,CSDN 部落格專家。畢業於同濟大學,學位碩士。曾先後就職於 eBay、愛奇藝、華為。熟悉 C/C++、Java、Spring、SpringMVC、Spring Boot、Spring Cloud、Redis、MyBatis、資料結構、設計樣式等等,開發過諸多大型專案,有豐富的專案經驗。熱愛程式設計,樂於分享。

Spring Boot是什麼

我們知道,從 2002 年開始,Spring 一直在飛速的發展,如今已經成為了在Java EE(Java Enterprise Edition)開發中真正意義上的標準,但是隨著技術的發展,Java EE使用 Spring 逐漸變得笨重起來,大量的 XML 檔案存在於專案之中。繁瑣的配置,整合第三方框架的配置問題,導致了開發和部署效率的降低。

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

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

這一要求促使了 2013 年初開始的 Spring Boot 專案的研發,到今天,Spring Boot 的版本已經到了 2.0.3 RELEASE。Spring Boot 並不是用來替代 Spring 的解決方案,而是和 Spring 框架緊密結合用於提升 Spring 開發者體驗的工具。同時它集成了大量常用的第三方庫配置,Spring Boot應用中這些第三方庫幾乎可以是零配置的開箱即用(out-of-the-box),大部分的 Spring Boot 應用都只需要非常少量的配置程式碼(基於 Java 的配置),開發者能夠更加專註於業務邏輯。

為什麼學習Spring Boot

從Spring官方來看

我們開啟 Spring 的官方網站,可以看到下圖:

我們可以看到圖中官方對 Spring Boot 的定位:Build Anything, Build任何東西。Spring Boot旨在盡可能快地啟動和執行,並且只需最少的 Spring 前期配置。 同時我們也來看一下官方對後面兩個的定位:

SpringCloud:Coordinate Anything,協調任何事情; 
SpringCloud Data Flow:Connect everything,連線任何東西。

仔細品味一下,Spring 官網對 Spring Boot、SpringCloud 和 SpringCloud Data Flow三者定位的措辭非常有味道,同時也可以看出,Spring 官方對這三個技術非常重視,是現在以及今後學習的重點(SpringCloud 相關達人課課程屆時也會上線)。

從Spring Boot的優點來看

Spring Boot 有哪些優點?主要給我們解決了哪些問題呢?我們以下圖來說明:

良好的基因

Spring Boot 是伴隨著 Spring 4.0 誕生的,從字面理解,Boot是引導的意思,因此 Spring Boot 旨在幫助開發者快速搭建 Spring 框架。Spring Boot 繼承了原有 Spring 框架的優秀基因,使 Spring 在使用中更加方便快捷。

簡化編碼

舉個例子,比如我們要建立一個 web 專案,使用 Spring 的朋友都知道,在使用 Spring 的時候,需要在 pom 檔案中新增多個依賴,而 Spring Boot 則會幫助開發著快速啟動一個 web 容器,在 Spring Boot 中,我們只需要在 pom 檔案中新增如下一個 starter-web 依賴即可。

<dependency>
   <groupId>org.springframework.bootgroupId>

   <artifactId>spring-boot-starter-webartifactId>

dependency>

我們點選進入該依賴後可以看到,Spring Boot 這個 starter-web 已經包含了多個依賴,包括之前在 Spring 工程中需要匯入的依賴,我們看一下其中的一部分,如下:


<dependency>
   <groupId>org.springframeworkgroupId>

   <artifactId>spring-webartifactId>

   <version>5.0.7.RELEASEversion>
   <scope>compilescope>
dependency>
<dependency>
   <groupId>org.springframeworkgroupId>
   <artifactId>spring-webmvcartifactId>
   <version>5.0.7.RELEASEversion>
   <scope>compilescope>
dependency>

由此可以看出,Spring Boot 大大簡化了我們的編碼,我們不用一個個匯入依賴,直接一個依賴即可。

簡化配置

Spring 雖然使Java EE輕量級框架,但由於其繁瑣的配置,一度被人認為是“配置地獄”。各種XML、Annotation配置會讓人眼花繚亂,而且配置多的話,如果出錯了也很難找出原因。Spring Boot更多的是採用 Java Config 的方式,對 Spring 進行配置。舉個例子:

我新建一個類,但是我不用 @Service註解,也就是說,它是個普通的類,那麼我們如何使它也成為一個 Bean 讓 Spring 去管理呢?只需要@Configuration 和@Bean兩個註解即可,如下:

public class TestService {
   public String sayHello () {
       return "Hello Spring Boot!";
   }
}

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JavaConfig {
   @Bean
   public TestService getTestService() {
       return new TestService();
   }
}

@Configuration表示該類是個配置類,@Bean表示該方法傳回一個 Bean。這樣就把TestService作為 Bean 讓 Spring 去管理了,在其他地方,我們如果需要使用該 Bean,和原來一樣,直接使用@Resource註解註入進來即可使用,非常方便。

@Resource
private TestService testService;


另外,部署配置方面,原來 Spring 有多個 xml 和 properties配置,在 Spring Boot 中只需要個 application.yml即可。

簡化部署

在使用 Spring 時,專案部署時需要我們在伺服器上部署 tomcat,然後把專案打成 war 包扔到 tomcat裡,在使用 Spring Boot 後,我們不需要在伺服器上去部署 tomcat,因為 Spring Boot 內嵌了 tomcat,我們只需要將專案打成 jar 包,使用 java -jar xxx.jar一鍵式啟動專案。

另外,也降低對執行環境的基本要求,環境變數中有JDK即可。

簡化監控

我們可以引入 spring-boot-start-actuator 依賴,直接使用 REST 方式來獲取行程的執行期效能引數,從而達到監控的目的,比較方便。但是 Spring Boot 只是個微框架,沒有提供相應的服務發現與註冊的配套功能,沒有外圍監控整合方案,沒有外圍安全管理方案,所以在微服務架構中,還需要 Spring Cloud 來配合一起使用。

從未來發展的趨勢來看

微服務是未來發展的趨勢,專案會從傳統架構慢慢轉向微服務架構,因為微服務可以使不同的團隊專註於更小範圍的工作職責、使用獨立的技術、更安全更頻繁地部署。而 繼承了 Spring 的優良特性,與 Spring 一脈相承,而且 支援各種REST API 的實現方式。Spring Boot 也是官方大力推薦的技術,可以看出,Spring Boot 是未來發展的一個大趨勢。

專家推薦

“隨著微服務架構的發展,Spring Boot 使用得越來越廣泛。跟武哥一起學 Spring Boot 課程,幫您真正做到快速上手,將技術點切實運用到微服務專案中。”

——愛奇藝遊戲事業部 高階技術經理 蔣華江 


編號748,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

Web開發

更多推薦18個技術類微信公眾號

涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

贊(0)

分享創造快樂