真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringBoot自動(dòng)配置原理(SpringBoot面試題)-創(chuàng)新互聯(lián)

目錄

按需求定制制作可以根據(jù)自己的需求進(jìn)行定制,做網(wǎng)站、網(wǎng)站建設(shè)構(gòu)思過(guò)程中功能建設(shè)理應(yīng)排到主要部位公司做網(wǎng)站、網(wǎng)站建設(shè)的運(yùn)用實(shí)際效果公司網(wǎng)站制作網(wǎng)站建立與制做的實(shí)際意義

1、產(chǎn)生疑惑?

2、源碼分析

2.1、pom.xml文件分析

2.2、啟動(dòng)類分析

3、總結(jié)


1、產(chǎn)生疑惑?

當(dāng)我們第一次使用Spring Boot練習(xí)的時(shí)候會(huì)覺(jué)得Spring Boot這么厲害,不管是依賴還是配置,它都為我們準(zhǔn)備好了,我們只需要去編寫(xiě)業(yè)務(wù)代碼就可以了,省去了配置的繁瑣。那么Spring Boot之所以能夠?yàn)槲覀兲峁┻@些操作,它是如何實(shí)現(xiàn)的呢?

2、源碼分析 2.1、pom.xml文件分析

我們打開(kāi)創(chuàng)建Spring Boot項(xiàng)目后的pom.xml文件

可以看到這里有一個(gè)parent標(biāo)簽,這就父級(jí)工程spring-boot-starter-parent,這叫做Spring Boot的起步依賴,那么這個(gè)起步依賴有什么東西呢,我們使用ctrl+左鍵打開(kāi)看看

可以看到這里面又繼承于一個(gè)spring-boot-dependencies的依賴,這就是Spring Boot的核心依賴,我們繼續(xù)打開(kāi)

可以看到,這里面整合了大量的依賴和插件,以及各個(gè)依賴的版本,非常大的文件,整整3200多行,這就是Spring Boot的核心依賴庫(kù),之所以我們不用再去手動(dòng)導(dǎo)依賴的原因,就是Spring Boot已經(jīng)把大量我們能用到的整合到了這個(gè)庫(kù)中,之所以我們不用再聲明依賴的版本是因?yàn)椋琒pring Boot做了統(tǒng)一的版本控制,不同版本的Spring Boot,里面會(huì)有不同版本的依賴。這也是Spring Boot特點(diǎn)之一約定大于配置。

Spring Boot還有很多啟動(dòng)依賴,spring-boot-starter只是其中一個(gè)

org.springframework.bootspring-boot-starterorg.springframework.bootspring-boot-starter-web
2.2、啟動(dòng)類分析

有了依賴的支持,那么Spring Boot是如何實(shí)現(xiàn)自動(dòng)配置的呢?

這就需要我們?nèi)パ芯恳幌聠?dòng)類中@SpringBootAppliation注解

我們ctrl+鼠標(biāo)左鍵打開(kāi)注解的源碼

可以看到里面是一個(gè)自定義注解的形式

@Target(ElementType.Type)? ?返回可以應(yīng)用于注釋類型的元素類型的數(shù)組

@Retention(RetentionPolicy.RUNTIME)? ? 指示被它注解的注解保留多久

注解說(shuō)明
SOURCE注解只保留在源文件,當(dāng)Java文件編譯成class文件的時(shí)候,注解被遺棄;被編譯器忽略
CLASS注解被保留到class文件,但jvm加載class文件時(shí)候被遺棄,這是默認(rèn)的生命周期
RUNTIME注解不僅被保存到class文件中,jvm加載class文件之后,仍然存在

@Documented? ?

指示帶有類型的注釋在默認(rèn)情況下由javadoc和類似工具記錄。該類型應(yīng)用于注釋類型的聲明,這些類型的注釋影響其客戶端對(duì)注釋元素的使用。

@Inherited?

指示自動(dòng)繼承注釋類型。

@SpringBootConfiguration (核心注解)

該注解作用:?

1.標(biāo)明本類是個(gè)配置類
2.掃描添加了@Configuration的配置類。

@EnableAutoConfiguration (最核心的注解)?開(kāi)啟自動(dòng)配置

我們打開(kāi)@Import注解里的AutoConfigurationImportSelector類

找到selectImports方法,里面調(diào)用了一個(gè)getAutoConfigurationEntry方法

我們ctrl+左鍵找到此方法,找到getCandidateConfigurations方法

在方法中找到loadFactoryNames方法?

經(jīng)過(guò)層層的尋找,終于在最后找到了獲取資源的路徑,是在META-INF/spring.factories文件中

Spring Boot自動(dòng)裝配的本質(zhì)就是通過(guò)Spring去讀取META-INF/spring.factories中保存的配置類文件然后加載bean定義的過(guò)程。

在jar包中,我們?nèi)ふ乙幌逻@個(gè)文件

可以看到,里面有非常多的配置,其中紅框中的就是常見(jiàn)的ElasticSearch、MongoData、Redis、SpringData。。。

這就是為什么Spring Boot不用再去讓我們?cè)偃リP(guān)注配置的原因

那么這么多配置信息,在Spring Boot啟動(dòng)的時(shí)候都會(huì)為我們配置上嗎?那不用的配置也要配置嗎?其實(shí)這點(diǎn)Sring Boot早就考慮到了,這些配置信息,只有我們添加了相關(guān)依賴才會(huì)為我們進(jìn)行配置。

那么Spring Boot是通過(guò)什么來(lái)實(shí)現(xiàn)根據(jù)添加的依賴進(jìn)行加載對(duì)應(yīng)配置信息呢?

我們可以隨便找一個(gè)第三方配置類進(jìn)去看一下,這里我選擇redis

可以看到,這里有一個(gè)注解沒(méi)有見(jiàn)過(guò),@ConditionalOnClass注解,這個(gè)注解的作用就是檢查是否導(dǎo)入相關(guān)依賴,如果沒(méi)有導(dǎo)入,則該類各個(gè)方法就會(huì)報(bào)錯(cuò)

3、總結(jié)

經(jīng)過(guò)上面的分析,Spring Boot的自動(dòng)裝配原理總結(jié)一句話為:

Spring Boot啟動(dòng)的時(shí)候加載主配置類,其中@EnableAutoConfiguration注解會(huì)通過(guò)@Import注解掃描所有jar包類路徑下的"META-INF/spring.factories",里面標(biāo)注了自動(dòng)配置類,自動(dòng)配置類會(huì)通過(guò)
@ConditionalOnClass注解檢測(cè)是否添加了相關(guān)依賴,如果添加了相關(guān)依賴會(huì)把自動(dòng)配置類中bean添加到容器中,完成自動(dòng)配置。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)站題目:SpringBoot自動(dòng)配置原理(SpringBoot面試題)-創(chuàng)新互聯(lián)
URL標(biāo)題:http://weahome.cn/article/ispcj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部