欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?Boot自動配置的原理及@Conditional條件注解

 更新時(shí)間:2022年07月01日 09:33:26   作者:劉Java  
這篇文章主要介紹了Spring?Boot自動配置的原理及@Conditional條件注解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的朋友可以參考一下

1 @SpringBootApplication自動配置原理

@SpringBootApplication是一個(gè)組合注解,主要由@ComponentScan、@SpringBootConfiguration、@EnableAutoConfiguration這三個(gè)注解組成。@EnableAutoConfiguration是Spring Boot實(shí)現(xiàn)自動配置的關(guān)鍵注解。

@ComponentScan用于掃描指定包及子包路徑,并將符合條件的組件類注冊到Spring容器中 。默認(rèn)的包路徑是當(dāng)前@ComponentScan所在的包及其子包。默認(rèn)的過濾條件是,如果類上具有包括@Component、@Service、@Repository、@Controller、@Configuration等注解,那么該類作為組件類而被注冊到容器中,也可以通過指定includeFilters和excludeFilters屬性來自定義條件。

@SpringBootConfiguration用于聲明當(dāng)前類是一個(gè)Spring Boot配置類,具有和@Configuration注解同樣的作用。但應(yīng)用程序中可以添加N個(gè)@Configuration注解的配置類,但是只能存在一個(gè)@SpringBootConfiguration注解的配置類。推薦使用@SpringBootConfiguration來表示作為一個(gè)Boot應(yīng)用程序的啟動類。

@EnableAutoConfiguration用于聲明在程序啟動時(shí),將會自動加載Spring Boot默認(rèn)的配置。這是實(shí)現(xiàn)自動配置的關(guān)鍵注解。

@EnableAutoConfiguration注解內(nèi)部主要是借助 @Import注解引入的AutoConfigurationImportSelector類來完成其功能。

而在AutoConfigurationImportSelector類中再借助SpringFactoriesLoader工具類獲取所有引入的jar包中和當(dāng)前類路徑下的META-INF/spring.factories文件。

spring.factories 文件必須是 Properties 格式,其中 key 是接口或抽象類的完全限定名稱,value 是逗號分隔的實(shí)現(xiàn)類名稱列表。SpringFactoriesLoader會將文件里面的自動配置類以及工廠類加載到Spring容器中,從而實(shí)現(xiàn)自動加載。這可以看作一種特殊的SPI機(jī)制。

其中,與常見的自動配置類相關(guān)的是位于spring-boot-autoconfigure.jar下的/META-INF/spring.factories文件中的配置信息,其中名為“org.springframework.boot.autoconfigure.EnableAutoConfiguration”的key對應(yīng)的value就是一系列自動配置類的全路徑名。

Spring將會拆分這個(gè)value為一個(gè)全路徑名集合,但他并不會將這些配置類全都加載,而是會將符合規(guī)則的自動配置類加載到Spring 容器中。

在過濾的時(shí)候,將會檢查類上的Conditional系列注解,@ConditionalOnClass和@ConditionalOnMissingClass、@ConditionalOnWebApplication和@ConditionalOnNotWebApplication、@ConditionalOnBean和@ConditionalOnMissingBean和@ConditionalOnSingleCandidate注解(如果存在),只有符合規(guī)則的自動配置類才會注冊到容器中。

我們也可以通過@SpringBootApplication的exclude和excludeName屬性指定排除某些自動配置類的注冊,這樣Spring Boot就不會自動注冊某些配置。

這些自動配置類基本上都是使用@Configuration注解標(biāo)注,并且其內(nèi)部有一系列的@Bean方法或者同樣被@Configuration注解標(biāo)注的內(nèi)部類。當(dāng)這些自動配置類被加載到容器中之后,它們內(nèi)部的@Bean方法或者內(nèi)部類將會被解析,就有可能幫助我們進(jìn)行一系列自動化的配置,將配置信息注冊到Spring 容器中。

以上就是Spring Boot自動配置的原理,實(shí)際上還是很好理解的。

比如AopAutoConfiguration配置類,這個(gè)類用于自動配置Spring AOP的功能。該類被配置到了spring.factories文件中,因此它會在Spring Boot項(xiàng)目啟動時(shí)被自動加載,而它的內(nèi)部的@Configuration靜態(tài)內(nèi)部類也會跟著加載并且根據(jù)@Conditional條件注解選用,我們在這些內(nèi)部類上面就能看到熟悉的@EnableAspectJAutoProxy注解,而這個(gè)注解就用于開始Spring AOP注解支持。

因此,我們不必在Spring Boot項(xiàng)目上手動添加@EnableAspectJAutoProxy注解,Spring Boot會自動幫我們配置這個(gè)注解。并且,spring.aop. proxy-target-class這個(gè)屬性的默認(rèn)值為true,也就是說,Spring Boot 2.x項(xiàng)目中默認(rèn)采用CGLIB動態(tài)代理。

2 @Conditional系列條件注解

@Conditional注解用于判斷某個(gè)配置是否需要跳過,并且可被用作元注解而標(biāo)注在其他注解上,這樣就提供了豐富的校驗(yàn)機(jī)制,可用于判斷某個(gè)自動配置類是否需要進(jìn)行某些自動配置。

spring-boot-autoconfigure包中提供了一系列的@Conditional注解的衍生注解,它們已被標(biāo)注在各種自動配置類上,當(dāng)條件滿足時(shí),就會進(jìn)行自動配置。我們也可以直接使用,常見的@Conditional系列注解如下:

到此這篇關(guān)于Spring Boot自動配置的原理及@Conditional條件注解的文章就介紹到這了,更多相關(guān)Spring Boot自動配置 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringData JPA 如何搭建 xml的配置方式

    SpringData JPA 如何搭建 xml的配置方式

    這篇文章主要介紹了SpringData JPA 如何搭建 xml的配置方式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-12-12
  • 使用Feign遠(yuǎn)程調(diào)用時(shí),序列化對象失敗的解決

    使用Feign遠(yuǎn)程調(diào)用時(shí),序列化對象失敗的解決

    這篇文章主要介紹了使用Feign遠(yuǎn)程調(diào)用時(shí),序列化對象失敗的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 詳解MyBatis配置typeAliases的方法

    詳解MyBatis配置typeAliases的方法

    這篇文章主要介紹了詳解MyBatis配置typeAliases的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • SpringBoot3-yaml文件配置方式

    SpringBoot3-yaml文件配置方式

    這篇文章主要介紹了SpringBoot3-yaml文件配置方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 詳解如何在Elasticsearch中搜索空值

    詳解如何在Elasticsearch中搜索空值

    這篇文章主要為大家介紹了如何在Elasticsearch中搜索空值的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 解決springboot沒有啟動標(biāo)識,啟動類也沒有啟動標(biāo)識的問題

    解決springboot沒有啟動標(biāo)識,啟動類也沒有啟動標(biāo)識的問題

    這篇文章主要介紹了解決springboot沒有啟動標(biāo)識,啟動類也沒有啟動標(biāo)識的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • springboot無法跳轉(zhuǎn)頁面的問題解決方案

    springboot無法跳轉(zhuǎn)頁面的問題解決方案

    這篇文章主要介紹了springboot無法跳轉(zhuǎn)頁面的問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 新手初學(xué)Java List 接口

    新手初學(xué)Java List 接口

    這篇文章主要介紹了Java集合操作之List接口及其實(shí)現(xiàn)方法,詳細(xì)分析了Java集合操作中List接口原理、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2021-07-07
  • Java 文件上傳的實(shí)例詳解

    Java 文件上傳的實(shí)例詳解

    這篇文章主要介紹了Java 文件上傳的實(shí)例詳解的相關(guān)資料,希望通過本文大家能掌握這部分內(nèi)容,使用幾種文件上傳的方法,需要的朋友可以參考下
    2017-09-09
  • Java?Handler同步屏障淺析講解

    Java?Handler同步屏障淺析講解

    同步屏障機(jī)制是什么?Handler發(fā)送的消息分為普通消息、屏障消息、異步消息,一旦Looper在處理消息時(shí)遇到屏障消息,那么就不再處理普通的消息,而僅僅處理異步的消息。不再使用屏障后,需要撤銷屏障,不然就再也執(zhí)行不到普通消息了
    2022-08-08

最新評論