日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

spring boot (3.自动配置@enableautoconfiguration)

發(fā)布時(shí)間:2024/4/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring boot (3.自动配置@enableautoconfiguration) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

?

主入口類/啟動(dòng)類

@SpringBootApplication

啟動(dòng)類是一個(gè)組合注解

配置類也是容器中的一個(gè)組件

第一個(gè)注解@springbootconfigration

  .

@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration springboot定義的配置注解 @EnableAutoConfiguration @ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class} ), @Filter(type = FilterType.CUSTOM,classes = {AutoConfigurationExcludeFilter.class} )} ) public @interface SpringBootApplication {

  ->configration

.

@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration spring定義的配置類注解 public @interface SpringBootConfiguration {

  ?

第二個(gè)注解@enableautoconfiguration開(kāi)啟自動(dòng)配置功能

告訴s.b.開(kāi)啟自動(dòng)配置功能

@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage 自動(dòng)配置包,將SpringBootApplication主配置類所在包以及子包的所有子類掃描到spring容器 @Import({AutoConfigurationImportSelector.class}) 導(dǎo)入組件開(kāi)啟自動(dòng)配置類導(dǎo)包的選擇器 public @interface EnableAutoConfiguration {

  

@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @Import({Registrar.class}) spring的底層注解,給容器中導(dǎo)入一個(gè)組件 public @interface AutoConfigurationPackage { }

  

假如在主配置類所在包package com.atguigu;外面package com;定義一個(gè)路徑/hello就掃描不進(jìn)來(lái)了

?

@Import({AutoConfigurationImportSelector.class})將所有需要導(dǎo)入的組件以全類名的方式返回;這些組件被添加到容器中;最終給容器導(dǎo)入很多自動(dòng)配置類(XXAutoConfiguration);給容器中導(dǎo)入這個(gè)場(chǎng)景需要的所有組件,并配置好這些組件;

有了自動(dòng)配置類免去了手動(dòng)編寫配置和注入功能組件的工作

AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);AnnotationAttributes attributes = this.getAttributes(annotationMetadata);List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);configurations = this.removeDuplicates(configurations);Set<String> exclusions = this.getExclusions(annotationMetadata, attributes);this.checkExcludedClasses(configurations, exclusions);configurations.removeAll(exclusions);configurations = this.filter(configurations, autoConfigurationMetadata);this.fireAutoConfigurationImportEvents(configurations, exclusions);return StringUtils.toStringArray(configurations);

  

?

打斷點(diǎn)可以看到如下內(nèi)容

?

進(jìn)入getCandidateConfigurations方法

?

List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
第一個(gè)參數(shù): protected Class<?> getSpringFactoriesLoaderFactoryClass() {
return EnableAutoConfiguration.class;
} SpringFactoriesLoader.loadFactoryNames()

?

SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class, this.beanClassLoader)

  從類加載器中獲取一個(gè)資源,把資源當(dāng)成properties文件,然后拿出工廠的名字。

springboot在啟動(dòng)的時(shí)候從META-INF/spring.factories獲取EnableAutoConfiguration指定的值

將這些值作為自動(dòng)配置類 導(dǎo)入到容器中,自動(dòng)配置類就生效,幫我們進(jìn)行自動(dòng)配置工作

?

?進(jìn)入擴(kuò)展

?

?

?

?

想找到什么配置,都可以在擴(kuò)展中meta-inf,spring.factories中這樣找

?

比如選擇其中的webmvcautoconfiguration,看到給容器中添加一個(gè)filter組件

比如添加解析器

?

?

?一攬子解決方案全都自動(dòng)配置

整體的解決方案自動(dòng)配置都在這里

D:\Maven-Repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar!\org\springframework\boot\autoconfigure

?

?每一種怎么配的都在這里學(xué)習(xí),也可以在其中改善

?

轉(zhuǎn)載于:https://www.cnblogs.com/tabCtrlShift/p/9069679.html

總結(jié)

以上是生活随笔為你收集整理的spring boot (3.自动配置@enableautoconfiguration)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。