最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

詳細(xì)SpringBoot框架教程——SpringBoot自動(dòng)配置原理

2021-04-01 10:27 作者:動(dòng)力節(jié)點(diǎn)小王本王  | 我要投稿



本篇文章主要內(nèi)容

SpringBoot自動(dòng)配置原理

Spring Boot中如何自定義starter?

視頻觀看戳??????


SpringBoot自動(dòng)配置原理

SpringBoot自動(dòng)配置原理(也叫 SpringBoot自動(dòng)裝配原理,SpringBoot starter原理)

流程圖:

https://www.processon.com/view/link/5efc4ffa6376891e81f3895d

在編寫(xiě)SpringBoot項(xiàng)目時(shí),入口類(lèi)上都會(huì)使用@SpringBootApplication注解了,我們可以看一下源代碼

1、@SpringBootApplication

我們先來(lái)看該注解本身,它本身還可以指定如下屬性:

exclude :?排除指定的類(lèi),比如:

@SpringBootApplication(exclude =?

RedisAutoConfiguration.class)

可以排除自定義配置等等,根據(jù)自己的需要進(jìn)行定制;

excludeName排除指定的類(lèi)名,通過(guò)bean name來(lái)進(jìn)行排除指定的類(lèi),如下:

@SpringBootApplication(excludeName = "org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration")

scanBasePackages: 掃描指定的包添加到Spring容器中,參數(shù)為數(shù)組類(lèi)型:

@SpringBootApplication(scanBasePackages="com.bjpowernode.boot.component")

掃描的包能注冊(cè)識(shí)別,沒(méi)有掃描的包將不能注冊(cè)識(shí)別;

scanBasePackageClasses: 掃描指定包的類(lèi)并添加到Spring容器中,參數(shù)為Class類(lèi)型數(shù)組格式:

@SpringBootApplication(scanBasePackageClasses=MyComponent.class)

注冊(cè)的類(lèi)能識(shí)別,在同級(jí)包下或子包下的都能注冊(cè),否則不能識(shí)別;

@SpringBootApplication注解本身又是一個(gè)復(fù)合注解,它等效于如下四個(gè)注解:

  • @SpringBootConfiguration

  • @EnableAutoConfiguration

  • @ComponentScan

  • @ConfigurationPropertiesScan

@SpringBootConfiguration

該注解等效于@Configuration,那也就是說(shuō)這個(gè)注解相當(dāng)于@Configuration,所以這兩個(gè)注解作用是一樣的,它是讓我們能夠去注冊(cè)一些額外的Bean,或者導(dǎo)入一些額外的配置,@Configuration還表示該類(lèi)是一個(gè)配置類(lèi),不需要額外的xml進(jìn)行配置,同時(shí)該類(lèi)也是Spring容器中的一個(gè)bean。

@EnableAutoConfiguration?(重點(diǎn))

該注解是Spring Boot自動(dòng)配置注解,Spring Boot中的自動(dòng)配置主要是@EnableAutoConfiguration的功勞,該注解可以讓Spring Boot根據(jù)類(lèi)路徑中的jar包依賴為當(dāng)

前項(xiàng)目進(jìn)行自動(dòng)配置,該注解由如下兩個(gè)注解構(gòu)成:

  • @AutoConfigurationPackage

  • @Import(EnableAutoConfigurationImportSelector.class)?

@AutoConfigurationPackage

讓包中的類(lèi)以及子包中的類(lèi)能夠被自動(dòng)掃描到Spring容器中;

@Import(AutoConfigurationPackages.Registrar.class)

register(registry, new?

PackageImport(metadata).getPackageName());

@Import注解,這個(gè)注解就是通過(guò)import的方式將bean添加到Spring容器中;

接下來(lái)我們重點(diǎn)看看注解:

@EnableAutoConfiguration

這是Spring Boot自動(dòng)配置的核心注解;

Spring框架本身也提供了幾個(gè)名字為@Enable開(kāi)頭的Annotation定義。比如@EnableScheduling、@EnableCaching等,@EnableAutoConfiguration的理念和這些注解其實(shí)是一脈相承的。

@EnableAutoConfiguration是借助@Import的幫助,將所有符合自動(dòng)配置條件的bean定義加載到IoC容器;

該注解通過(guò)@Import注解導(dǎo)入了一個(gè)組件:AutoConfigurationImportSelector,該組件實(shí)現(xiàn)了接口:

public interface DeferredImportSelector extends ImportSelector

該接口主要是為了導(dǎo)入@Configuration的配置項(xiàng);

會(huì)調(diào)用getCandidateConfigurations方法:

在這里遇到我們熟悉的SpringFactoryiesLoader, 它會(huì)讀取META-INF/spring.factories下的EnableAutoConfiguration的配置,緊接著在進(jìn)行排除與過(guò)濾,進(jìn)而得到需要裝配的類(lèi);

? ??

@EnableAutoConfiguration與@Conditional

@EnableAutoConfiguration自動(dòng)加載配置,@Conditional根據(jù)環(huán)境決定是否解析處理配置,這兩個(gè)注解的配合完成了自動(dòng)化配置功能;

Spring Boot中如何自定義starter?

1、寫(xiě)一個(gè)starter項(xiàng)目,一般是一個(gè)空殼,里面不寫(xiě)代碼,主要是起到依賴其他項(xiàng)目的作用;

2、寫(xiě)一個(gè)真正的實(shí)現(xiàn)自動(dòng)裝配邏輯的項(xiàng)目,在項(xiàng)目classpath下寫(xiě)一個(gè)META-INF/spring.factories文件;

3、在spring.factories中添加配置:

org.springframework.boot.autoconfigure.EnableAutoConfiguration =

com.bjpowernode.xxxConfiguration(該類(lèi)我們自己去實(shí)現(xiàn),里面主要是要做自動(dòng)化的配置,給使用者把該配的配置好,讓別人可以直接使用)

4、xxxConfiguration類(lèi)需要添加注解@Configuration;

5、xxxConfiguration類(lèi)一般也會(huì)使用@Conditional來(lái)適應(yīng)不同的環(huán)境;

6、在xxxConfiguration類(lèi)中實(shí)現(xiàn)自動(dòng)化配置;

有了SpringBoot的自動(dòng)化配置,我們可以靈活的自定義我們自己的自動(dòng)配置,當(dāng)應(yīng)用需要該功能時(shí),只需要簡(jiǎn)單的依賴該starter即可,同時(shí)Spring Boot為我們提供的條件注解,同樣的代碼可以靈活適應(yīng)各種環(huán)境;


如果想更深入的學(xué)習(xí)springboot,奉上springboot全套視頻教程,視頻學(xué)習(xí)效果更佳,走過(guò)路過(guò)別忘素質(zhì)三連哦~~


詳細(xì)SpringBoot框架教程——SpringBoot自動(dòng)配置原理的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
沅江市| 城固县| 大连市| 东宁县| 益阳市| 霍州市| 文成县| 綦江县| 凤翔县| 新营市| 登封市| 湖南省| 宝山区| 乌兰浩特市| 白沙| 绿春县| 墨竹工卡县| 台中县| 于田县| 南康市| 庆城县| 潮州市| 关岭| 仁怀市| 宁陵县| 五大连池市| 探索| 肥城市| 余江县| 普兰县| 襄樊市| 宁南县| 公安县| 抚宁县| 揭阳市| 康平县| 饶河县| 姚安县| 永嘉县| 弥渡县| 镇远县|