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

JAVA Spring Boot 自動配置實(shí)現(xiàn)原理詳解

 更新時間:2021年09月02日 10:45:57   作者:北白川鱈子  
這篇文章主要介紹了詳解SpringBoot自動配置原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

引言

在使用ssm框架的時候,每每想要用到依賴的功能,都需要導(dǎo)入相關(guān)jar包,并且寫配置文件做相關(guān)的配置,當(dāng)然也可以不寫配置文件,用配置類來代替配置文件也可以。在使用springboot框架的時候,會發(fā)現(xiàn)只要引入相關(guān)依賴,然后直接使用就行了,往往沒有自己做什么配置,或者想要更改一些配置屬性,比如改端口號,只要在application.properties文件里做修改就可以了,而且所有的配置都在這里。這就是springboot的自動配置功能。那springboot到底做了什么神奇的事情,使得我們可以從“配置地獄”中解放呢?

主啟動類的注解@SpringBootApplication

我們創(chuàng)建一個springboot項(xiàng)目,會發(fā)現(xiàn)項(xiàng)目目錄很干凈,springboot框架唯一可能動手腳的地方就剩主啟動類了。主啟動類也很干凈,里面的SpringApplication.run()方法會創(chuàng)建并返回IoC容器,spring項(xiàng)目就這樣跑起來了,嫌疑就落到了注解頭上。

點(diǎn)進(jìn)這個注解,發(fā)現(xiàn)其包含了三個注解,分別是@SpringBootConfiguration、@EnableAutoConfiguration@ComponentScan,在進(jìn)一步,發(fā)現(xiàn)@SpringBootConfiguration只是個@Configuration,@ComponentScan是組件掃描,而@EnableAutoConfiguration一看就和自動配置有關(guān)系。

1、@SpringBootConfiguration

只是個@Configuration

2、@ComponentScan

組件掃描用

3、@EnableAutoConfiguration

點(diǎn)進(jìn)源碼,發(fā)現(xiàn)其代替了兩個注解,分別是@AutoConfigurationPackage@Import({AutoConfigurationImportSelector.class}),我們分別來研究這兩個注解

3.1、@AutoConfigurationPackage

點(diǎn)進(jìn)源碼,發(fā)現(xiàn)其包含了@Import({Registrar.class}),再點(diǎn)進(jìn)去,發(fā)現(xiàn)是批量注冊組件,而默認(rèn)掃描路徑就是與主啟動類所在的包,也就是主啟動類坐在的包下面,所有的組件會被掃描注冊到IoC容器中。這就解釋了為什么要把自己的組件寫到與主啟動類同包下。

3.2、@Import({AutoConfigurationImportSelector.class})

點(diǎn)進(jìn)源碼,會發(fā)現(xiàn)這個也是批量組測組件,而注冊的組件在哪里呢?它會讀取一個配置文件,這個配置文件里寫了所有需要注冊的127個組件。我們會發(fā)現(xiàn),這些個組件就是springboot替我們寫的配置類。那么這些配置類在哪里呢?在spring-boot-autoconfigure-2.4.4.jar里面。這下明白springboot是從哪里自動導(dǎo)入配置類的了。

spring-boot-autoconfigure中的默認(rèn)配置類

這里面所有的配置類都會被自動注冊,但我們又不是會用到全部可能的功能,那這樣豈不是造成了浪費(fèi)?實(shí)際上,配置類可以使用@Conditional注解來根據(jù)條件決定自己是否注冊。我們?nèi)绻麤]有引入相關(guān)的依賴,@Conditional可能就會判斷出這個配置類不需要注冊。又或者我們自己寫了配置類,那@Conditional也可能會使這個配置類不注冊。

配置數(shù)據(jù)的綁定

那么所有的配置數(shù)據(jù)都可以在一個配置文件(既application.properties)中修改,是怎樣做到的呢?

是使用這幾個注解做到的:@EnableConfigurationProperties@ConfigurationProperties,這兩個注解可以使我們在配置文件中寫的數(shù)據(jù)封裝到對應(yīng)的類里面,這樣配置類就能拿到我們寫的配置數(shù)據(jù)了。

SpringBoot實(shí)現(xiàn)自動配置的流程圖如下:

在這里插入圖片描述

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Java歐拉函數(shù)的計(jì)算代碼詳解

    Java歐拉函數(shù)的計(jì)算代碼詳解

    這篇文章主要介紹了Java實(shí)現(xiàn)歐拉函數(shù)的計(jì)算,從歐拉函數(shù)引伸出來在環(huán)論方面的事實(shí)和拉格朗日定理構(gòu)成了歐拉定理的證明,本文通過實(shí)例代碼給大家介紹的很詳細(xì),需要的朋友可以參考下
    2021-05-05
  • JAVA 16位ID生成工具類含16位不重復(fù)的隨機(jī)數(shù)數(shù)字+大小寫

    JAVA 16位ID生成工具類含16位不重復(fù)的隨機(jī)數(shù)數(shù)字+大小寫

    這篇文章主要介紹了JAVA 16位ID生成工具類含16位不重復(fù)的隨機(jī)數(shù)數(shù)字+大小寫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Java中volatile關(guān)鍵字的線程的可見性、有序性詳解

    Java中volatile關(guān)鍵字的線程的可見性、有序性詳解

    這篇文章主要介紹了Java中volatile關(guān)鍵字的線程的可見性、有序性詳解,在juc多線程并發(fā)編程中,常常需要關(guān)注線程的"可見性"與"有序性",本文將詳細(xì)介紹這兩部分內(nèi)容,以及volatile關(guān)鍵字的使用,需要的朋友可以參考下
    2024-01-01
  • mybatis的mapper.xml中resultMap標(biāo)簽的使用詳解

    mybatis的mapper.xml中resultMap標(biāo)簽的使用詳解

    這篇文章主要介紹了mybatis的mapper.xml中resultMap標(biāo)簽的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • IDEA提示:Boolean method ‘xxx‘ is always inverted問題

    IDEA提示:Boolean method ‘xxx‘ is always&nb

    這篇文章主要介紹了IDEA提示:Boolean method ‘xxx‘ is always inverted問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • SpringBoot實(shí)現(xiàn)發(fā)送QQ郵件的示例代碼

    SpringBoot實(shí)現(xiàn)發(fā)送QQ郵件的示例代碼

    這篇文章主要介紹了SpringBoot如何實(shí)現(xiàn)發(fā)送QQ郵件功能,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • springboot中使用自定義兩級緩存的方法

    springboot中使用自定義兩級緩存的方法

    這篇文章主要介紹了springboot中使用自定義兩級緩存的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 關(guān)于@SpringBootApplication與@SpringBootTest的區(qū)別及用法

    關(guān)于@SpringBootApplication與@SpringBootTest的區(qū)別及用法

    這篇文章主要介紹了關(guān)于@SpringBootApplication與@SpringBootTest的區(qū)別及用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 用JAVA實(shí)現(xiàn)單鏈表,檢測字符串是否是回文串

    用JAVA實(shí)現(xiàn)單鏈表,檢測字符串是否是回文串

    這篇文章主要介紹了使用JAVA實(shí)現(xiàn)單鏈表,檢測字符串是否是回文串,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11
  • 理解zookeeper選舉機(jī)制

    理解zookeeper選舉機(jī)制

    本文主要介紹了zookeeper選舉機(jī)制的相關(guān)知識,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02

最新評論