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

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)文章

  • Mybatis中foreach的使用詳解

    Mybatis中foreach的使用詳解

    Mybatis中foreach標(biāo)簽的使用詳解,包括屬性說(shuō)明、代碼示例和總結(jié),感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Springboot之日志、配置文件、接口數(shù)據(jù)如何脫敏

    Springboot之日志、配置文件、接口數(shù)據(jù)如何脫敏

    本文主要介紹了Springboot之配置文件數(shù)據(jù)脫敏、接口返回?cái)?shù)據(jù)脫敏、日志文件數(shù)據(jù)脫敏三個(gè)方面,需要了解學(xué)習(xí)的小伙伴快跟隨小編的腳步一起去看看吧
    2021-09-09
  • Java如何把map分割成多個(gè)map

    Java如何把map分割成多個(gè)map

    這篇文章主要介紹了Java如何把map分割成多個(gè)map,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-08-08
  • java線程之死鎖

    java線程之死鎖

    這篇文章主要介紹了Java線程之死鎖,死鎖是這樣一種情形-多個(gè)線程同時(shí)被阻塞,它們中的一個(gè)或者全部都在等待某個(gè)資源被釋放。由于線程被無(wú)限期地阻塞,因此程序不可能正常終止
    2022-05-05
  • Java的集合LinkedHashSet詳解

    Java的集合LinkedHashSet詳解

    這篇文章主要介紹了Java的集合LinkedHashSet詳解,LinkedHashSet介于HashSet和TreeSet之間,它也是一個(gè)hash表,但是同時(shí)維護(hù)了一個(gè)雙鏈表來(lái)記錄插入的順序,需要的朋友可以參考下
    2023-09-09
  • MyBatisX插件之domain文件生成不了問(wèn)題

    MyBatisX插件之domain文件生成不了問(wèn)題

    文章描述了在使用MyBatisX插件生成MyBatis的domain文件時(shí)遇到的問(wèn)題,特別是在使用MyBatisX版本1.6.1和MySQL版本8.0.34的情況下,生成的domain文件不完整,作者通過(guò)勾選Model選項(xiàng)解決了這個(gè)問(wèn)題,并分享了這一經(jīng)驗(yàn),希望能幫助其他遇到類(lèi)似問(wèn)題的用戶(hù)
    2025-01-01
  • Java使用sleep方法暫停線程Thread

    Java使用sleep方法暫停線程Thread

    這篇文章介紹了Java使用sleep方法暫停線程Thread,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • 舉例分析Python中設(shè)計(jì)模式之外觀模式的運(yùn)用

    舉例分析Python中設(shè)計(jì)模式之外觀模式的運(yùn)用

    這篇文章主要介紹了Python中設(shè)計(jì)模式之外觀模式的運(yùn)用,外觀模式主張以分多模塊進(jìn)行代碼管理而減少耦合,需要的朋友可以參考下
    2016-03-03
  • 理解Java中的內(nèi)存泄露及解決方法示例

    理解Java中的內(nèi)存泄露及解決方法示例

    這篇文章主要介紹了理解Java中的內(nèi)存泄露及解決方法示例,本文講解了Java內(nèi)存管理機(jī)制、Java內(nèi)存泄露、一般情況下內(nèi)存泄漏的避免、復(fù)雜數(shù)據(jù)結(jié)構(gòu)中的內(nèi)存泄露問(wèn)題等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • 解決mybatisplus的分頁(yè)插件和條件構(gòu)造器自定義SQL遇到的BUG

    解決mybatisplus的分頁(yè)插件和條件構(gòu)造器自定義SQL遇到的BUG

    這篇文章主要介紹了解決mybatisplus的分頁(yè)插件和條件構(gòu)造器自定義SQL遇到的BUG,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評(píng)論

永靖县| 宜君县| 桦南县| 道孚县| 大关县| 镇远县| 青岛市| 雷波县| 延津县| 淮南市| 绩溪县| 南皮县| 遂昌县| 新疆| 武邑县| 苗栗县| 浦北县| 会泽县| 西平县| 上高县| 峡江县| 民勤县| 安龙县| 池州市| 陇南市| 平武县| 稷山县| 桂阳县| 舟山市| 永济市| 湖南省| 辽源市| 洛浦县| 津市市| 江孜县| 武穴市| 北川| 瓮安县| 克拉玛依市| 八宿县| 平顺县|