關(guān)于@SpringBootApplication詳解
一、@SpringBootApplication注解介紹
@SpringBootApplication這個(gè)注解是springboot啟動類上的一個(gè)注解,是一個(gè)組合注解,也就是由其他注解組合起來,它的主要作用就是標(biāo)記說明這個(gè)類是springboot的主配置類,springboot可以運(yùn)行這個(gè)類里面的main()方法來啟動程序
這個(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è)注解是開啟自動配置的功能,里面包含了兩個(gè)注解
@AutoConfigurationPackage
@Import
(AutoConfigurationImportSelector.class)
4.1 @AutoConfigurationPackage
它會自動掃描@SpringBootApplication注解所在類所在的包,并將該包及其子包下的所有組件加載到spring的容器中。
這個(gè)注解的作用說白了就是將主配置類(@SpringBootApplication標(biāo)注的類)所在包以及子包里面的所有組件掃描并加載到spring的容器中,這也就是為什么我們在利用springboot進(jìn)行開發(fā)的時(shí)候,無論是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)鍵就在這個(gè)loadSpringFactories()方法里面,在這個(gè)方法里,它會查找所有在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個(gè)場景的所有自動配置啟動的時(shí)候默認(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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot?vue接口測試前后端樹節(jié)點(diǎn)編輯刪除功能
這篇文章主要為大家介紹了springboot?vue接口測試前后端樹節(jié)點(diǎn)編輯刪除功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05關(guān)于Mybatis中SQL節(jié)點(diǎn)的深入解析
這篇文章主要給大家介紹了關(guān)于Mybatis中SQL節(jié)點(diǎn)的深入解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03Java 梳理總結(jié)關(guān)于static關(guān)鍵字常見問題
static關(guān)鍵字基本概念我們可以一句話來概括:方便在沒有創(chuàng)建對象的情況下來進(jìn)行調(diào)用。也就是說:被static關(guān)鍵字修飾的不需要?jiǎng)?chuàng)建對象去調(diào)用,直接根據(jù)類名就可以去訪問,讓我們來了解一下你可能還不知道情況2022-04-04Mybatis基于注解實(shí)現(xiàn)多表查詢功能
這篇文章主要介紹了Mybatis基于注解實(shí)現(xiàn)多表查詢功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09jdbc實(shí)現(xiàn)寵物商店管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了jdbc實(shí)現(xiàn)寵物商店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10java list,set,map,數(shù)組間的相互轉(zhuǎn)換詳解
這篇文章主要介紹了java list,set,map,數(shù)組間的相互轉(zhuǎn)換詳解的相關(guān)資料,這里附有實(shí)例代碼,具有參考價(jià)值,需要的朋友可以參考下2017-01-01