首頁 > 軟體

SpringBoot自動裝配原理以及分析

2022-11-21 14:01:11

先看看SpringBoot的主設定類

裡面有一個main方法執行了一個run()方法,在run方法中必須要傳入一個被@SpringBootApplication註解的類。

@SpringBootApplication

SpringBoot應用標註在某個類上說明這個類是SpringBoot的主設定類,SpringBoot就會執行這個類的main方法來啟動SpringBoot專案。

那@SpringBootApplication註解到底是什麼呢,點進去看看:

發現@SpringBootApplication是一個組合註解。

@SpringBootConfiguration

先看看@SpringBootConfiguration註解

這個註解很簡單,表明該類是一個Spring的設定類。

再進去看看@Configuration

說明Spring的設定類也是Spring的一個元件。

@EnableAutoConfiguration

這個註解是開啟自動設定的功能。

先看看@AutoConfigurationPackage註解

這個註解是自動設定包,主要是使用的@Import來給Spring容器中匯入一個元件 ,這裡匯入的是Registrar.class。

來看下這個Registrar

就是通過這個方法獲取掃描的包路徑,可以debug看看:

在這行程式碼上打了一個斷點

啟動專案

進入斷點處

看看能否獲取掃描的包路徑

已經獲取到了包路徑

那那個metadata是什麼呢?

可以看到是標註在@SpringBootApplication註解上的DemosbApplication,也就是我們的主設定類:

說白了就是將主設定類(即@SpringBootApplication標註的類)的所在包及子包裡面所有元件掃描載入到Spring容器。

所以包名一定要注意。

現在包掃描路徑獲取到了,那具體載入哪些元件呢,看看下面這個註解。

@Import({AutoConfigurationImportSelector.class})

@Import註解就是給Spring容器中匯入一些元件,這裡傳入了一個元件的選擇器:AutoConfigurationImportSelector。

裡面有一個selectImports方法,將所有需要匯入的元件以全類名的方式返回;這些元件就會被新增到容器中。

debug執行看看

會給容器中匯入非常多的自動設定類(xxxAutoConfiguration);就是給容器中匯入這個場景需要的所有元件,並設定好這些元件:

有了自動設定類,免去了我們手動編寫設定注入功能元件等的工作。

那他是如何獲取到這些設定類的呢,看看上面這個方法:

會從META-INF/spring.factories中獲取資源,然後通過Properties載入資源:

Spring Boot在啟動的時候從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值,將這些值作為自動設定類匯入到容器中,自動設定類就生效,幫我們進行自動設定工作。

以前我們需要自己設定的東西,自動設定類都幫我們完成了。

J2EE的整體整合解決方案和自動設定都在spring-boot-autoconfigure-2.0.3.RELEASE.jar:

比如看看WebMvcAutoConfiguration

都已經幫我們設定好了,我們不用再單獨設定了:

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


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