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

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

Java四十四篇:springboot 的自動裝配

2023-03-14 00:36 作者:小劉Java之路  | 我要投稿

程序入口

image.png

由springboot的自動配置原理,其入口是@SpringBootApplication注解

image.png

SpringBootApplication注解其實是SpringBootConfiguration、EnableAutoConfiguration、ComponentScan三個注解的組合;

SpringBootConfiguration可以理解為Spring版的Configuration注解;

EnableAutoConfiguration:這是SpringBoot自動配置的入口里面有兩個關鍵點

image.png

**@AutoConfigurationPackage:**設置SpringBoot自動掃描包點路徑,當basePackages或basePackageClasses屬性沒有指定包掃描路徑時默認從啟動類所在當包開始掃描;

**@Import(AutoConfigurationImportSelector.class:**通過Import注解向Spring容器中注入一個類為AutoConfigurationImportSelector的bean,AutoConfigurationImportSelector實現(xiàn)了DeferredImportSelector類,該類中的getAutoConfigurationEntry方法中會將spring-boot-autoconfigure包下Resource/META-INF/spring.factories文件中以EnableAutoConfiguration為key值的所有配置類讀取并篩選出來,這里面的類都是配置類,和我們自己寫的以@Configuration標注的配置類作用相同,這里面基本包含了目前常用的組件配置。

解釋

1.Springboot啟動后,讀取程序的啟動類時,就會讀取到@SpringBootApplication


2.@SpringBootApplication注解又包含了 @EnableAutoConfiguration注解


3.@EnableAutoConfiguration注解導入了AutoConfigurationImportSelector類,

4.@AutoConfigurationPackage :自動配置包


5.AutoConfigurationImportSelector.class中,定義了一個方法getCandidateConfigurations,進入getCandidateConfigurations方法,getCandidateConfigurations會到classpath下的讀取META-INF/spring.factories文件的配置


6.spring.factories文件在spring-boot-autoconfigure-2.3.7.RELEASE.jar的META-INF中,spring.factories文件中聲明了很多java配置類,但是每個配置類都是需要滿足一定的條件才會執(zhí)行(例如: @ConditionalOnClass 、 @ConditionalOnProperty、 @ConditionalOnMissingBean等)

image.png


7.隨便打開一個自動配置文件,比如說WebMvcAutoConfiguration.class


WebMvcAutoConfiguration這個類中使用的注解可以看出,要完成自動配置是有依賴條件的。

這些是springboot特有的,常見的條件依賴注解有:

@ConditionalOnSingleCandidate,僅在當前上下文中存在某個bean時,才會實例化這個Bean。

@ConditionalOnClass,某個class位于類路徑上,才會實例化這個Bean。

@ConditionalOnExpression,當表達式為true的時候,才會實例化這個Bean。

@ConditionalOnMissingBean,僅在當前上下文中不存在某個bean時,才會實例化這個Bean。

@ConditionalOnMissingClass,某個class在類路徑上不存在的時候,才會實例化這個Bean。

@ConditionalOnNotWebApplication,不是web應用時才會實例化這個Bean。

@AutoConfigureAfter,在某個bean完成自動配置后實例化這個bean。

@AutoConfigureBefore,在某個bean完成自動配置前實例化這個bean。

所以,自動配置真正實現(xiàn)是從classpath中搜尋所有的META-INF/spring.factories配置文件 ,并將其中對應的 org.springframework.boot.autoconfigure. 包下的配置項,通過反射實例化為對應標注了 @Configuration的JavaConfig形式的IOC容器配置類 , 然后將這些都匯總成為一個實例并加載到IOC容器中。

總結(jié)

1、@Configuration&與@Bean->基于java代碼的bean配置

2、@Conditional->設置自動配置條件依賴

3、@EnableConfigurationProperties與@ConfigurationProperties->讀取配置文件轉(zhuǎn)換為bean。

4、@EnableAutoConfiguration、@AutoConfigurationPackage 與@Import->實現(xiàn)bean發(fā)現(xiàn)與加載。

5、@EnableAutoConfiguration自動配置從classpath中搜尋所有的META-INF/spring.factories配置文件,并將其中org.springframework.boot.autoconfigure.EnableutoConfiguration對應的配置項通過反射(Java Refletion)實例化為對應的標注了@Configuration的JavaConfig形式的IoC容器配置類,然后匯總為一個并加載到IoC容器。

springboot啟動加載所有的配置類(127個),按需加載所需配置類。

img


Java四十四篇:springboot 的自動裝配的評論 (共 條)

分享到微博請遵守國家法律
江华| 和林格尔县| 江北区| 鄂州市| 津南区| 郁南县| 枣阳市| 台山市| 莱州市| 房产| 兴安县| 甘洛县| 高尔夫| 舟山市| 弥渡县| 顺义区| 沭阳县| 济阳县| 皋兰县| 娱乐| 莱阳市| 宁远县| 织金县| 泗水县| 泸州市| 灵璧县| 读书| 安化县| 来宾市| 徐闻县| 黄石市| 大余县| 镇坪县| 凤阳县| 南陵县| 磐安县| 罗定市| 海丰县| 兴国县| 田阳县| 天柱县|