最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1 @SpringBootApplication自動配置原理

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2 @Conditional系列條件注解

@Conditional注解用于判斷某個配置是否需要跳過,并且可被用作元注解而標注在其他注解上,這樣就提供了豐富的校驗機制,可用于判斷某個自動配置類是否需要進行某些自動配置。

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

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

相關文章

  • SpringBoot獲取resources目錄下的文件

    SpringBoot獲取resources目錄下的文件

    在 Spring Boot 項目中,獲取 resources 目錄中的文件路徑通常涉及到訪問類路徑資源,Spring Boot 提供了一些工具類和方法,下面小編就來和大家詳細聊聊
    2024-10-10
  • Spring高級之注解@PropertySource的原理

    Spring高級之注解@PropertySource的原理

    這篇文章主要介紹了Spring高級之注解@PropertySource的原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • IDEA 自帶的數(shù)據(jù)庫工具真的很牛(收藏版)

    IDEA 自帶的數(shù)據(jù)庫工具真的很牛(收藏版)

    這篇文章主要介紹了IDEA 自帶的數(shù)據(jù)庫工具真的很牛(收藏版),本文以 IntelliJ IDEA/ Mac 版本作為演示,其他版本的應該也差距不大,需要的朋友可以參考下
    2021-04-04
  • Java獲取當前操作系統(tǒng)的信息實例代碼

    Java獲取當前操作系統(tǒng)的信息實例代碼

    這篇文章主要介紹了Java獲取當前操作系統(tǒng)的信息實例代碼,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • org.apache.ibatis.binding.BindingException異常報錯原因以及詳細解決方案

    org.apache.ibatis.binding.BindingException異常報錯原因以及詳細解決方案

    這篇文章主要給大家介紹了關于org.apache.ibatis.binding.BindingException異常報錯原因以及詳細解決方案的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • JDK集合源碼之解析TreeMap(一)

    JDK集合源碼之解析TreeMap(一)

    下面小編就為大家?guī)硪黄獪\談java中的TreeMap 排序與TreeSet 排序。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-07-07
  • SpringCloud?eureka(server)微服務集群搭建過程

    SpringCloud?eureka(server)微服務集群搭建過程

    這篇文章主要介紹了微服務SpringCloud-eureka(server)集群搭建,?項目搭建的主要步驟和配置就是創(chuàng)建項目和引入pom依賴,本文通過圖文示例代碼相結合給大家介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • springboot application.yml使用@@pom文件配置問題

    springboot application.yml使用@@pom文件配置問題

    這篇文章主要介紹了springboot application.yml使用@@pom文件配置問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java的NIO與IO的詳解及對比

    Java的NIO與IO的詳解及對比

    這篇文章主要介紹了Java的NIO與IO的詳解及對比的相關資料,需要的朋友可以參考下
    2017-03-03
  • SpringBoot底層注解超詳細介紹

    SpringBoot底層注解超詳細介紹

    這篇文章主要介紹了SpringBoot底層注解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-09-09

最新評論

安宁市| 萍乡市| 长葛市| 灵宝市| 翼城县| 东乡| 济阳县| 安宁市| 砀山县| 饶平县| 石棉县| 龙川县| 西安市| 军事| 丰台区| 双城市| 徐汇区| 渭源县| 宝鸡市| 蕉岭县| 广西| 宣恩县| 河间市| 城步| 上饶县| 噶尔县| 林周县| 孝昌县| 北宁市| 阳城县| 徐闻县| 柳江县| 尚志市| 常宁市| 长武县| 麦盖提县| 北宁市| 平度市| 左权县| 黑河市| 凉城县|