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

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

@Configuration注解包含:

三、@ComponentScan介紹
包掃描注解:@ComponentScan 的作用就是根據(jù)定義的掃描路徑,把符合掃描規(guī)則的類裝配到spring容器中
四、@EnableAutoConfiguration介紹
這個(gè)注解是開啟自動(dòng)配置的功能,里面包含了兩個(gè)注解
@AutoConfigurationPackage@Import(AutoConfigurationImportSelector.class)
4.1 @AutoConfigurationPackage
它會(huì)自動(dòng)掃描@SpringBootApplication注解所在類所在的包,并將該包及其子包下的所有組件加載到spring的容器中。
這個(gè)注解的作用說白了就是將主配置類(@SpringBootApplication標(biāo)注的類)所在包以及子包里面的所有組件掃描并加載到spring的容器中,這也就是為什么我們在利用springboot進(jìn)行開發(fā)的時(shí)候,無論是Controller還是Service的路徑都是與主配置類同級(jí)或者次級(jí)的原因
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)鍵就在這個(gè)loadSpringFactories()方法里面,在這個(gè)方法里,它會(huì)查找所有在META-INF路徑下的spring.factories文件,從META-INF/spring.factories文件中找到所有的對應(yīng)配置類,然后將這些自動(dò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個(gè)場景的所有自動(dòng)配置啟動(dòng)的時(shí)候默認(rèn)全部加載,但是xxxxAutoConfiguration按照條件裝配規(guī)則(@Conditional),最終會(huì)按需配置。
如AopAutoConfiguration類:
@Configuration(
proxyBeanMethods = false
)
@ConditionalOnProperty(
prefix = "spring.aop",
name = "auto",
havingValue = "true",
matchIfMissing = true
)
public class AopAutoConfiguration {
public AopAutoConfiguration() {
}
...
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringSecurity導(dǎo)致Redis壓力大問題的解決方案
在我們現(xiàn)有的系統(tǒng)中,用于登錄的?Redis?服務(wù)器?CPU?占用率長期處于?90%?的高位,這一狀況帶來了極大的風(fēng)險(xiǎn)隱患,因此,本文旨在解決這個(gè)問題,下面小編給大家詳細(xì)介紹SpringSecurity導(dǎo)致Redis壓力大問題的解決方案,需要的朋友可以參考下2025-06-06
SpringBoot實(shí)現(xiàn)RabbitMQ監(jiān)聽消息的四種方式
本文主要介紹了SpringBoot實(shí)現(xiàn)RabbitMQ監(jiān)聽消息的四種方式,包括@RabbitListener,MessageListener接口,MessageListenerAdapter適配器,@RabbitHandler這幾種,感興趣的可以了解一下2024-05-05
Spring?Cloud詳細(xì)講解zuul集成Eureka流程
這篇文章主要介紹了Spring?Cloud?zuul集成Eureka,Eureka?Client中內(nèi)置一個(gè)負(fù)載均衡器,用來進(jìn)行基本的負(fù)載均衡,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
Java實(shí)現(xiàn)基于清除后分配規(guī)則的垃圾回收器詳解
垃圾回收是 Java 語言的一項(xiàng)重要特性,自動(dòng)管理對象內(nèi)存,防止內(nèi)存泄漏和野指針問題,下面我們就來看看如何利用Java實(shí)現(xiàn)基于清除后分配規(guī)則的垃圾回收器吧2025-03-03
Java實(shí)現(xiàn)的獲取和判斷文件頭信息工具類用法示例
這篇文章主要介紹了Java實(shí)現(xiàn)的獲取和判斷文件頭信息工具類,結(jié)合實(shí)例形式分析了Java針對文件讀取及頭信息判斷相關(guān)操作技巧,需要的朋友可以參考下2017-11-11

