首頁 > 軟體

SpringBoot起步依賴和自動設定基本介紹

2023-10-16 22:00:47

1、起步依賴

概念
起步依賴本質上是一個Maven專案物件模型(Project Object Model,POM),定義了對其他庫的傳遞依賴,這些東西加在一起支援某一功能。

簡單的說,起步依賴就是將具備某種功能的座標打包到一起,並提供一些預設的功能
例子-搭建Web應用
Spring+SpringMVC

我們需要新增許多依賴,還要考慮到不同依賴之間存在版本衝突的問題,一般搭建一個Web專案時需要匯入以下依賴:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.1.3.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>5.1.3.RELEASE</version>
</dependency>

SpringBoot

搭建Web專案只需要匯入一個起步依賴:

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

也就是隻需要匯入一個名為spring-boot-starter-web 的起步依賴即可,我們點 spring-boot-starter-web 進去可以看到,其實這個起步依賴整合了常用的 web 依賴。

2、自動設定

概念
SpringBoot的自動設定是一個執行時(應用程式啟動時)的過程,根據設定,才決定Spring設定應該使用哪個,這個過程是Spring自動完成的。
分析
在SpringBoot中整合了一些常見的容器,或者說是元件,例如我們最常用的Tomcat伺服器,所以在做web專案時,不需要再另外部署到Tomcat上,可以直接執行,這就需要整個專案有一個入口,類似於普通java程式中的main方法(其實就是main方法),這個入口我們一般用一個單獨的類來表示,其中包含一個main方法,這個類通常稱之為SpringBoot的引導類,SpringBoot入門程式的引導類程式碼如下:

@SpringBootConfiguration@ComponentScan 註解。前者實質為 @Configuration 註解,這個註解相比大家都接觸過,也就是起到宣告這個類為設定類的作用,而後者起到開啟自動掃描元件的作用。

這裡需要重點分析的是 @EnableAutoConfiguration 這個註解,這個註解的作用是開啟 Spring Boot 的自動設定功能,我們來分析一下它是如何開啟的,點選進去可以看到:

可以看到這個註解上邊又有兩個註解,@AutoConfigurationPackage和@Import,@AutoConfigurationPackage是用來管理自動設定類的,可以先不看,先看@Import,這個註解在Spring純註解設定當中也使用過,它的作用是匯入另外一個設定類,這裡匯入了一個叫做AutoConfigurationImportSelector的設定類,翻譯過來就是自動設定的匯入選擇器,進一步挖它的原始碼:
由於這個類內容較多,我們只關心它實現自動設定的步驟,所以我們根據內部呼叫關係一步一步找:

內容太多看不懂不要緊,我們只看關鍵部分,這是我們找到的關鍵方法,第一個方法字面意思就是“選擇匯入”,它的內部又呼叫了第二個關鍵方法,意為“獲取自動設定入口”,在這個getAutoConfigurationEntry()方法中可以明顯看到configurations這樣的關鍵字眼(通過下面的分析可以確定裡面裝的是一些設定類的全限定類名),而且它是一個字串型別的集合,它來自於getCandidateConfigurations()方法,所以我們在這個類中繼續往下找這個方法:

挖到這裡,可以看到它還在繼續呼叫其他類中的方法,這個時候要還想繼續往下挖可能就有一定難度了,但是在這個時候我們可以從下方的message中發現一點貓膩,裡面的META-INF/spring.factories好像看起來是某個路徑下的,那麼是那個路徑下呢,我們可以盲猜就是當前這個類相關的某個路徑,所以我們來到這個類的最上方看它的全限定包名:

我們可以根據這個包名在我們匯入的Libraies裡面去找這個包,然後真的找到了這麼一個組態檔:

這個組態檔裡面是一些全限定類名,而且每個類名都是以AutoConfiguration結尾的,這就基本可以確定上面那個configurations裡面對應的就是這些內容,然後繼續在裡面找我們認識且熟悉的:

前面提到的內建Tomcat就是在這個裡面進行設定的,我們通過這個全限定類名繼續找到這個類:

我們通過關鍵註解@EnableConfigurationProperties(ServerProperties.class)繼續往下挖,找到ServerProperties這個類:

可以看到這個類中定義了很多跟tomcat伺服器有關的屬性,如port埠、address地址等,上面有一個@ConfigurationProperties註解的屬性中有一個prefix = “server”,這個其實就是對應組態檔中的字首,那麼組態檔在哪呢,我們繼續回到spring.factories同級的目錄下,會發現如下的一個json檔案:

在這個.json檔案中,可以找到跟剛才相關的設定,也就是說,這個json檔案裡面的值,就是SpringBoot自動設定時幫我們設定的值,如果我們需要更改這些設定,只需要在我們的組態檔中設定一下就行了,就會覆蓋這裡的預設設定,而使用我們的自定義設定。

SpringBoot自動設定原理的分析,到這裡就基本結束了,雖然分析得比較淺薄,但是對於初學者想初步瞭解SpringBoot自動設定過程來說,這種深度恰到好處。等進一步熟練它的使用後,可以再進一步往底層挖掘,雖然有些太細節的東西,在專案開發中基本用不到,但是自己有一定了解的話,在使用過程中碰到問題可以有更清晰的思路去定位並解決。

到此這篇關於SpringBoot起步依賴和自動設定的文章就介紹到這了,更多相關SpringBoot起步依賴和自動設定內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com