iT邦幫忙

2021 iThome 鐵人賽

DAY 4
1
Modern Web

誤打誤撞學了Spring Boot 還當了後端工程師系列 第 4

Day 04 - Spring Boot 的前世今生

結束了惱人的環境安裝,但我們還沒有要開始Spring Boot 的實作,因為在開始學習一項技術之前,我們一定要先了解它的由來、開發目的、理念以及優缺點,這樣才可以知道為什麼要使用它以及它與其他工具的差異。

Spring

介紹了Spring Boot 之前先來介紹它的前身Spring,Spring 是一個輕量級的Java 開發框架,主要依存於SSH 框架,即Structs + Spring + Hibernate,定位很明確,Struts 主要負責view 層的顯示,Spring 利用IOC 和AOP 來處理業務,Hibernate 則是資料的持久化到資料庫。

而Spring 為了開發Java 應用程式提供了全面的基礎架構支援。它具有以下幾個特點。

  1. 非侵入式
    所謂非侵入式是指Spring 框架的API 不會出現在業務邏輯上,也就是說業務邏輯應該是乾淨的,不會出現與業務邏輯無關的程式。針對應用而言,這樣才能將業務邏輯從目前應用中剝離出來,進一步在其他的應用中實現重用;針對框架而言,由於業務邏輯中沒有Spring 的API,所以業務邏輯也可以從Spring 框架快速移植到其他框架。

  2. 容器
    Spring 提供了容器功能,容器可以管理物件的生命週期以及物件與物件之間的依賴關係,可以寫一個設定檔定義物件的名稱、是否單例以及設定與其他物件的依賴關係,當容器啟動後,這些物件就被建立好實體了,可以直接注入使用。

  3. IOC 控制反轉
    控制反轉是一種程式設計的方式,即依賴關係的轉移,如果以前都是依賴於實現,那麼現在反轉為依賴於抽象,核心思想就在於面對介面程式設計。

  4. 依賴注入
    物件與物件之間依賴關係的實現,包括介面注入,建構注入等。

  5. AOP 剖面程式設計
    將記錄檔、安全、交易管理等功能想像成一個剖面,原先這些功能都是直接寫在業務邏輯中,但它有兩個缺點,首先就是業務邏輯不乾淨,其次就是這些功能被很多業務邏輯重複使用,不能做到重用。AOP 就解決了上述問題,可以把這些功能從業務邏輯中撥離出來形成一個剖面,可以實現重用。

Spring Boot

設計目的

Spring Boot 的設計目的是為了解決Spring 各版本設定工作過於繁重的問題,簡化初始架設流程、降低開發難度,使開發人員只需要專注在應用程式的開發,而無須過多關注XML 的配置。

設計理念

Spring Boot 的設計理念為約定大於配置(Convention Over Configuration),為此提供了很多已經整合好的依賴套件,以便開發人員在開發應用程式時能做到不用或者很少的Spring 配置就可以讓專案快速執行,這樣的好處就是開發人員可以把更多的精力放在業務邏輯的開發上。

優點

  1. 使用簡單
    Spring Boot 可使用註釋的方式實現類別的定義與功能的開發,即可無程式產生和XML 設定。而且Spring Boot 會根據類別路徑中的JAR 包,為JAR 包中的類別自動配置Bean,這樣可以大量減少我們要使用的配置,當然Spring Boot 只考慮大部分開發狀況,若實際開發中我們需要配置Bean 也可以自定義配置。

  2. 配置簡單
    Spring Boot 為了簡化Maven 配置設定提供了大量的Starter,開發人員只要能配置好相對應組件參數,Spring Boot 就會自動配置,讓開發人員能快速搭建依賴於Spring 組件的Java 項目,例如,Spring Boot 為了幫助開發人員快速啟動一個web 容器,提供了spring-boot-starter-web 依賴,只需要在pom.xml 檔案中新增web 依賴即可。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    而點選進入web 依賴後可以發現,spring-boot-starter-web 已經包含了多個依賴,包括在Spring 中需要匯入的依賴,如下圖展示一部分依賴。

    <!-- 忽略其他依賴 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.0.7.RELEASE</version>
        <scope>compile</scope>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.0.7.RELEASE</version>
        <scope>compile</scope>
    </dependency>
    
  3. 部署簡單
    Spring Boot 內嵌了各種Servlet 容器、Tomcat、Jetty 等,不再需要打包成war 包部署到容器中,我們只需要將專案打包成Jar 包,所有的依賴包都在一個Jar 包內,使用java -jar xxx.jar 即可啟動專案。

  4. 監控簡單
    Spring Boot 提供了spring-boot-starter-actuator 依賴,它是一套監控、管理應用程式狀態的功能模組,包含監控應用程式的執行緒資訊、記憶體資訊等。

缺點

雖然Spring Boot 上手很容易,大部分東西都自動配置,簡化了許多架設流程,但也因此需要非常了解Spring Boot 的核心技術原理,需要對配置訊息非常熟悉,不然一旦遇到問題就很棘手,要找問題也不是很容易。

Spring Cloud

Spring Cloud 是基於Spring Boot 的一整套實現微服務的框架,它是一套分散式服務治理架構,本身不提供實際功能性的操作,只專注於服務之間的通訊、熔斷和監控等,因此需要很多原件來共同支援一套功能。

三者的關係

從上述介紹可以看出,Spring Boot 其實是依賴於Spring 的,並不是一個全新的架構,Spring Boot 就是Spring 的自動化,而Spring Cloud 透過依賴Spring Boot 來建置微服務應用。

參考網站

Spring Framework - 维基百科,自由的百科全书
Springboot是什麼?Springboot詳解!入門介紹


上一篇
Day 03 - 環境安裝(下) JDK & Spring Tool Suite
下一篇
Day 05 - IoC 容器與Servlet 容器
系列文
誤打誤撞學了Spring Boot 還當了後端工程師30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
aa4731073
iT邦新手 4 級 ‧ 2021-12-08 15:53:40

大師你好,本人是新手,想請問一下,spring boot 和spring boot2 請問優先先學哪一個?,我是想說既然有2了,那是不乾脆學2比較好?

建議先學spring boot 2,程式語言和框架的迭代通常都是新增一些支援或細節的改動,本質上不會有太大的差異,但學完之後再去了解兩者之間的差異,不只是面試會考,在公司會有新專案跟舊專案,經手的專案不可能都是新的版本,一定還是要接前人留下來的坑。

aa4731073 iT邦新手 4 級 ‧ 2021-12-12 21:58:09 檢舉

謝謝大師解答

我要留言

立即登入留言