Spring Boot介紹
Spring Boot簡介
Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。
SpringBoot基於Spring4.0設計,不僅繼承了Spring框架原有的優秀特性,而且還通過簡化配置來進一步簡化了Spring應用的整個搭建和開發過程。另外SpringBoot通過整合大量的框架使得依賴包的版本衝突,以及引用的不穩定性等問題得到了很好的解決。
從上面兩段介紹,對Spring Boot應該有一個初步的認識了:
- 源自於Spring4.0框架
- 簡化了Spring應用開發
- 整合了大量的框架
這就是我們對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中的一些特點:
- 建立獨立的spring應用(Spring不再是配角)。
- 嵌入Tomcat, Jetty Undertow 而且不需要部署他們。
- 提供的“starters” poms來簡化Maven配置(一站式管理依賴)
- 儘可能自動配置spring應用。
- 提供生產指標,健壯檢查和外部化配置
- 絕對沒有程式碼生成和XML配置要求
區別
相信介紹之後兩者區別很明顯了:
- 專案搭建和開發過程Spring Boot要優於大部分Spring應用開發,並且簡化了Spring應用。並不需要配置大量的配置檔案,也不需要繁雜的開發步驟,Spring Boot繼承了Spring的優點並在其擴充套件了自己的特點(就是包含大量框架)。
- 解決了專案中依賴之間的不穩定性,依賴衝突的問題。Spring Boot幫我們一站式管理了依賴,而Spring要在maven中顯示宣告大部分依賴。
- Spring Boot內部嵌入了服務端,而且不需要部署,Spring 需要我們手動配置和部署(即使用了idea)
當然兩者區別肯定是不只上訴三點的,這只是兩者最直觀,初學最開始感受到的區別。
Spring Boot的初步使用
使用Spring Boot搭建一個簡單的Spring MVC 專案:
我們先用maven建立一個普通的java專案,專案結構如圖:
至於為什麼這個普通的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的依賴
展示的有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官方建議我們將入口類放在根目錄下。
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得出結果:
從中我們可以看到Tomcat開放的埠號,以及web專案的根url
瀏覽器輸入:localhost:8080/show
成功接收到伺服器返回的資訊!代表我們使用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應用。