Java學習:爲什麼學習Spring Boot?

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 的官方網站,可以看到下圖:

Java學習:為什麼學習Spring Boot?

我們可以看到圖中官方對 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 有哪些優點?主要給我們解決了哪些問題呢?我們以下圖來說明:

Java學習:為什麼學習Spring Boot?

良好的基因

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

Java學習:為什麼學習Spring Boot?

簡化編碼

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

org.springframework.boot

spring-boot-starter-web

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

org.springframework

spring-web

5.0.7.RELEASE

compile

org.springframework

spring-webmvc

5.0.7.RELEASE

compile

由此可以看出,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 是未來發展的一個大趨勢。

大家如果想要更深入瞭解java相關知識,私信我回復:【Java】 即可知道你們想要知道的java相關問題


分享到:


相關文章: