關(guān)于@SpringBootApplication詳解
一、@SpringBootApplication注解介紹
@SpringBootApplication這個注解是springboot啟動類上的一個注解,是一個組合注解,也就是由其他注解組合起來,它的主要作用就是標(biāo)記說明這個類是springboot的主配置類,springboot可以運行這個類里面的main()方法來啟動程序

這個注解主要由三個子注解組成:
@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan
二、@SpringBootConfiguration介紹
這個注解包含了@Configuration,@Configuration里面又包含了一個@Component注解,也就是說,這個注解標(biāo)注在哪個類上,就表示當(dāng)前這個類是一個配置類,而配置類也是spring容器中的組件
@SpringBootConfiguration注解包含:

@Configuration注解包含:

三、@ComponentScan介紹
包掃描注解:@ComponentScan 的作用就是根據(jù)定義的掃描路徑,把符合掃描規(guī)則的類裝配到spring容器中
四、@EnableAutoConfiguration介紹
這個注解是開啟自動配置的功能,里面包含了兩個注解
@AutoConfigurationPackage@Import(AutoConfigurationImportSelector.class)
4.1 @AutoConfigurationPackage
它會自動掃描@SpringBootApplication注解所在類所在的包,并將該包及其子包下的所有組件加載到spring的容器中。
這個注解的作用說白了就是將主配置類(@SpringBootApplication標(biāo)注的類)所在包以及子包里面的所有組件掃描并加載到spring的容器中,這也就是為什么我們在利用springboot進行開發(fā)的時候,無論是Controller還是Service的路徑都是與主配置類同級或者次級的原因
4.2 @Import(AutoConfigurationImportSelector.class)
1.利用getAutoConfigurationEntry(annotationMetadata);給容器中批量導(dǎo)入一些組件

2.調(diào)用List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)獲取到所有需要導(dǎo)入到容器中的配置類

3.利用工廠加載 Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的組件

4.關(guān)鍵就在這個loadSpringFactories()方法里面,在這個方法里,它會查找所有在META-INF路徑下的spring.factories文件,從META-INF/spring.factories文件中找到所有的對應(yīng)配置類,然后將這些自動配置類加載到spring容器中。


默認(rèn)掃描我們當(dāng)前系統(tǒng)里面所有META-INF/spring.factories位置的文件
spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories
雖然我們127個場景的所有自動配置啟動的時候默認(rèn)全部加載,但是xxxxAutoConfiguration按照條件裝配規(guī)則(@Conditional),最終會按需配置。
如AopAutoConfiguration類:
@Configuration(
proxyBeanMethods = false
)
@ConditionalOnProperty(
prefix = "spring.aop",
name = "auto",
havingValue = "true",
matchIfMissing = true
)
public class AopAutoConfiguration {
public AopAutoConfiguration() {
}
...
}總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot?vue接口測試前后端樹節(jié)點編輯刪除功能
這篇文章主要為大家介紹了springboot?vue接口測試前后端樹節(jié)點編輯刪除功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05
關(guān)于Mybatis中SQL節(jié)點的深入解析
這篇文章主要給大家介紹了關(guān)于Mybatis中SQL節(jié)點的深入解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-03-03
Java 梳理總結(jié)關(guān)于static關(guān)鍵字常見問題
static關(guān)鍵字基本概念我們可以一句話來概括:方便在沒有創(chuàng)建對象的情況下來進行調(diào)用。也就是說:被static關(guān)鍵字修飾的不需要創(chuàng)建對象去調(diào)用,直接根據(jù)類名就可以去訪問,讓我們來了解一下你可能還不知道情況2022-04-04
java list,set,map,數(shù)組間的相互轉(zhuǎn)換詳解
這篇文章主要介紹了java list,set,map,數(shù)組間的相互轉(zhuǎn)換詳解的相關(guān)資料,這里附有實例代碼,具有參考價值,需要的朋友可以參考下2017-01-01

