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

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

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

引言

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

主啟動(dòng)類(lèi)的注解@SpringBootApplication

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

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

1、@SpringBootConfiguration

只是個(gè)@Configuration

2、@ComponentScan

組件掃描用

3、@EnableAutoConfiguration

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

3.1、@AutoConfigurationPackage

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

3.2、@Import({AutoConfigurationImportSelector.class})

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

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

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

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

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

是使用這幾個(gè)注解做到的:@EnableConfigurationProperties@ConfigurationProperties,這兩個(gè)注解可以使我們?cè)谂渲梦募袑?xiě)的數(shù)據(jù)封裝到對(duì)應(yīng)的類(lèi)里面,這樣配置類(lèi)就能拿到我們寫(xiě)的配置數(shù)據(jù)了。

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

在這里插入圖片描述

總結(jié)

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

相關(guān)文章

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

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

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

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

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

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

    這篇文章主要介紹了Java中volatile關(guān)鍵字的線程的可見(jiàn)性、有序性詳解,在juc多線程并發(fā)編程中,常常需要關(guān)注線程的"可見(jià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)簽的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • IDEA提示:Boolean method ‘xxx‘ is always inverted問(wèn)題

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

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

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

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

    springboot中使用自定義兩級(jí)緩存的方法

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

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

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

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

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

    理解zookeeper選舉機(jī)制

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

最新評(píng)論