Spring Boot學習(一)——Spring Boot介紹

CN_DADA 發表於 2021-09-16
Spring

Spring Boot介紹

Spring Boot簡介

Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。

SpringBoot基於Spring4.0設計,不僅繼承了Spring框架原有的優秀特性,而且還通過簡化配置來進一步簡化了Spring應用的整個搭建和開發過程。另外SpringBoot通過整合大量的框架使得依賴包的版本衝突,以及引用的不穩定性等問題得到了很好的解決。

從上面兩段介紹,對Spring Boot應該有一個初步的認識了:

  1. 源自於Spring4.0框架
  2. 簡化了Spring應用開發
  3. 整合了大量的框架

這就是我們對Spring Boot的初步認識,我們在通過與Spring框架的對比,來弄清楚Spring框架已經很優秀了,為什麼還需要Spring Boot?

Spring Boot與Spring

Spring

我們學習完JavaSE之後我們就步入了學習JavaEE的過程,我們首先學的就是JavaWeb(Tomcat和Servlet),後面就開始學習Spring,我相信在學習Spring的時候,大家看的第一張圖應該就是那張將Spring所有主要模組羅列的圖了。而Spring框架其實包含了很多的功能模組,並且我們可以根據專案需求使用其中某些模組。

拿Spring MVC框架舉例,在我們使用Spring MVC框架進行開發時我們會發現比匯入jar包更多的是構建Spring MVC專案時我們需要配置的檔案——application.xml,springmvc-config.xml,log4j.properties,db.properties...,這一大堆的配置檔案還是專案不是很大的情況下,如果專案夠大,為了規範程式碼,配置檔案肯定更多更繁雜,最關鍵的是,其中大部分程式碼在多個web專案中配置內容大多相同,不同的只是引數,即使是是用了Spring提供的Java註解,配置檔案寫起來也還是麻煩,這個時候要是可以幫我們自動寫配置檔案就好了,我們只需要表明關鍵的配置引數,一個web專案就生成了,這樣豈不是不用浪費時間在寫配置檔案和書寫依賴關係上了?所以Spring Boot出現了

Spring Boot

Spring Boot基本上是Spring框架的擴充套件,它消除了設定Spring應用程式所需的XML配置,為更快,更高效的開發生態系統鋪平了道路。有點類似於maven,maven整合了全部jar,而Spring Boot整合了絕大部分框架。

當然不是說Spring Boot不需要配置,Spring Boot需要的配置檔案類似於Maven的POM,maven就POM一個配置檔案,而Spring Boot也就一個配置檔案足以,並且配置規則不難,大部分配置已經預設好了。關鍵是Spring Boot還幫助我們進行了依賴之間的管理和依賴的版本控制。降低了依賴之間的衝突。

以下是Spring Boot中的一些特點:

  1. 建立獨立的spring應用(Spring不再是配角)。
  2. 嵌入Tomcat, Jetty Undertow 而且不需要部署他們。
  3. 提供的“starters” poms來簡化Maven配置(一站式管理依賴)
  4. 儘可能自動配置spring應用。
  5. 提供生產指標,健壯檢查和外部化配置
  6. 絕對沒有程式碼生成和XML配置要求

區別

相信介紹之後兩者區別很明顯了:

  • 專案搭建和開發過程Spring Boot要優於大部分Spring應用開發,並且簡化了Spring應用。並不需要配置大量的配置檔案,也不需要繁雜的開發步驟,Spring Boot繼承了Spring的優點並在其擴充套件了自己的特點(就是包含大量框架)。
  • 解決了專案中依賴之間的不穩定性,依賴衝突的問題。Spring Boot幫我們一站式管理了依賴,而Spring要在maven中顯示宣告大部分依賴。
  • Spring Boot內部嵌入了服務端,而且不需要部署,Spring 需要我們手動配置和部署(即使用了idea)

當然兩者區別肯定是不只上訴三點的,這只是兩者最直觀,初學最開始感受到的區別。

Spring Boot的初步使用

使用Spring Boot搭建一個簡單的Spring MVC 專案:

我們先用maven建立一個普通的java專案,專案結構如圖:

20210916092647

至於為什麼這個普通的Java專案是web專案,學到後面就詳細瞭解了,我們先用Spring Boot跑起來。

下一步就是使用maven匯入Spring Boot的依賴,這裡我們這裡就採用繼承的方式。
pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>01_test_springBoot_web</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 配置要繼承父專案,繼承Spring Boot中的資源 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.10.RELEASE</version>
    </parent>

    <!-- 使用dependencyManagement 來管理
     通過上面方式,就可以獲取spring-boot-dependencies 2.1.10.RELEASE.pom檔案中dependencyManagement配置的jar包依賴
     相當於拿到了spring-boot-dependencies 中的pom檔案中dependencyManagement中宣告的依賴
     -->
<!--    <dependencyManagement>-->
<!--        <dependencies>-->
<!--            <dependency>-->
<!--                <groupId>org.springframework.boot</groupId>-->
<!--                <artifactId>spring-boot-dependencies</artifactId>-->
<!--                <version>2.1.10.RELEASE</version>-->
<!--                <type>pom</type>-->
<!--                <scope>import</scope>-->
<!--            </dependency>-->
<!--        </dependencies>
    </dependencyManagement>-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

看我們專案的maven的依賴

20210916143157
展示的有7個主體依賴(並不是所有依賴),其中有Spring boot、json、tomcat、Spring web、Spring webmvc、validator(引數校驗)。

我們的maven中只顯示依賴了spring-boot-starter-web,這個玩意稱為Spring web的啟動器,Spring Boot中整合了Spring web框架,所以Spring Boot會自動將Spring Web框架以及所需的依賴都幫我們匯入,這就體現了Spring Boot對依賴的統一管理特點。

接下來我們開始編寫邏輯程式碼,在com.lyl.controller下新建MyController.java:

package com.lyl.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MyController {
    @ResponseBody
    @RequestMapping("show")
    public String show(){
        return "Hello Spring Boot!";
    }
}

controller層寫好了,接下來是不是應該將專案部署到我們本地Tomcat中呢?按理來說我們是部署不了的,因為這個時候專案中並沒有webapp資料夾,也沒有WEB-INF,那我們如何執行呢?

前面說我們匯入的依賴中有Tomcat的依賴,也就是說Spring Boot本身就為我們這個專案內嵌了Tomcat,我們可以直接在Spring Boot上執行我們的web專案。

但是我們不知道從哪裡開始執行,Spring Boot為我們提供了應用入口,其實就是一個普通的Java類,但是Spring Boot官方建議我們將入口類放在根目錄下。
20210916164533
MyApplication.java:

package com.lyl;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

// 可以自動掃描當前類的包及其子包下的所有註解
/*
    @SpringBootApplication代表的是組合註解:

    @Configuration
    @EnableAutoConfiguration
    @ComponentScan
    
*/
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class,args);
    }
}

執行main得出結果:
20210916164949
從中我們可以看到Tomcat開放的埠號,以及web專案的根url
瀏覽器輸入:localhost:8080/show

20210916165124

成功接收到伺服器返回的資訊!代表我們使用Spring Boot搭建web專案已經成功,我們使用maven將我們專案打包,在target中發現war包沒有了,取而代之的竟然是jar包!為什麼會這樣?jar包可以被java的編譯器識別,而war包是給tomcat的,也就是說,Spring Boot幫我們內建了tomcat(需要依賴),所以我們就省去了部署專案這一步驟,tomcat的相關配置也只要在Spring Boot配置檔案中配置就好。

到此我們對Spring Boot應該有了一個初步的瞭解。

Spring Boot的理解

Spring Boot不是Spring的替代品,Spring Boot依賴Spring框架來管理物件的依賴。Spring Boot也不是精簡版的Spring,Spring Boot為Spring做好了面向各種企業級產品的準備。

我們如果Spring基礎不紮實,學習Spring Boot時遇到一些知識點可能理解困難,效率不高。所以我們首先應該學好Spring框架的基礎。核心依舊是Spring。

在我們以往使用Spring框架,一般是使用Spring中的模組,web容器啟動時再去進行Spring容器的註冊和初始化,而Spring Boot是以Spring啟動後去載入web容器,所以叫建立獨立的Spring應用。