亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

SpringBoot自動配置原理

Rainie / 2034人閱讀

摘要:開啟自動配置功能后文詳解這個注解,學過的同學應該對它不會陌生,就是掃描注解,默認是掃描當前類下的。簡單來說,這個注解可以幫助我們自動載入應用程序所需要的所有默認配置。簡單理解這二者掃描的對象是不一樣的。

前言
只有光頭才能變強。
文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y

回顧前面Spring的文章(以學習的順序排好):

Spring入門這一篇就夠了

Spring【依賴注入】就是這么簡單

Spring【AOP模塊】就這么簡單

Spring【DAO模塊】知識要點

SpringMVC入門就這么簡單

SpringMVC【開發(fā)Controller】詳解

SpringMVC【參數綁定、數據回顯、文件上傳】

SpringMVC【校驗器、統(tǒng)一處理異常、RESTful、攔截器】

SpringBoot就是這么簡單

SpringData JPA就是這么簡單

Spring IOC知識點一網打盡!

Spring AOP就是這么簡單啦

外行人都能看懂的SpringCloud,錯過了血虧!

作為一名Java程序員,就不可能不了解SpringBoot,如果不了解(趕緊學!)

一、SpringBoot的自動配置原理

不知道大家第一次搭SpringBoot環(huán)境的時候,有沒有覺得非常簡單。無須各種的配置文件,無須各種繁雜的pom坐標,一個main方法,就能run起來了。與其他框架整合也賊方便,使用EnableXXXXX注解就可以搞起來了!

所以今天來講講SpringBoot是如何實現自動配置的~

1.1三個重要的注解

我們可以發(fā)現,在使用main()啟動SpringBoot的時候,只有一個注解@SpringBootApplication

我們可以點擊進去@SpringBootApplication注解中看看,可以發(fā)現有三個注解是比較重要的:

@SpringBootConfiguration:我們點進去以后可以發(fā)現底層是Configuration注解,說白了就是支持JavaConfig的方式來進行配置(使用Configuration配置類等同于XML文件)。

@EnableAutoConfiguration:開啟自動配置功能(后文詳解)

@ComponentScan:這個注解,學過Spring的同學應該對它不會陌生,就是掃描注解,默認是掃描當前類下的package。將@Controller/@Service/@Component/@Repository等注解加載到IOC容器中。

所以,Java3yApplication類可以被我們當做是這樣的:

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public class Java3yApplication {

    public static void main(String[] args) {
        SpringApplication.run(Java3yApplication.class, args);
    }
}
1.2重點EnableAutoConfiguration

我們知道SpringBoot可以幫我們減少很多的配置,也肯定聽過“約定大于配置”這么一句話,那SpringBoot是怎么做的呢?其實靠的就是@EnableAutoConfiguration注解。

簡單來說,這個注解可以幫助我們自動載入應用程序所需要的所有默認配置。

介紹有一句說:

if you have tomcat-embedded.jar on your classpath you are likely to want a TomcatServletWebServerFactory

如果你的類路徑下有tomcat-embedded.jar包,那么你很可能就需要TomcatServletWebServerFactory

我們點進去看一下,發(fā)現有兩個比較重要的注解:

@AutoConfigurationPackage:自動配置包

@Import:給IOC容器導入組件

1.2.1AutoConfigurationPackage

網上將這個@AutoConfigurationPackage注解解釋成自動配置包,我們也看看@AutoConfigurationPackage里邊有什么:

我們可以發(fā)現,依靠的還是@Import注解,再點進去查看,我們發(fā)現重要的就是以下的代碼:

@Override
public void registerBeanDefinitions(AnnotationMetadata metadata,
        BeanDefinitionRegistry registry) {
    register(registry, new PackageImport(metadata).getPackageName());
}

默認的情況下就是將:主配置類(@SpringBootApplication)的所在包及其子包里邊的組件掃描到Spring容器中。

看完這句話,會不會覺得,這不就是ComponentScan的功能嗎?這倆不就重復了嗎?

我開始也有這個疑問,直到我看到文檔的這句話:

it will be used when scanning for code @Entity classes.
It is generally recommended that you place EnableAutoConfiguration (if you"re
not using @SpringBootApplication) in a root package so that all sub-packages
and classes can be searched.

比如說,你用了Spring Data JPA,可能會在實體類上寫@Entity注解。這個@Entity注解由@AutoConfigurationPackage掃描并加載,而我們平時開發(fā)用的@Controller/@Service/@Component/@Repository這些注解是由ComponentScan來掃描并加載的。

簡單理解:這二者掃描的對象是不一樣的。

1.2.2回到Import

我們回到@Import(AutoConfigurationImportSelector.class)這句代碼上,再點進去AutoConfigurationImportSelector.class看看具體的實現是什么:

我們再進去看一下這些配置信息是從哪里來的(進去getCandidateConfigurations方法):

這里包裝了一層,我們看到的只是通過SpringFactoriesLoader來加載,還沒看到關鍵信息,繼續(xù)進去:

簡單梳理:

FACTORIES_RESOURCE_LOCATION的值是META-INF/spring.factories

Spring啟動的時候會掃描所有jar路徑下的META-INF/spring.factories,將其文件包裝成Properties對象

從Properties對象獲取到key值為EnableAutoConfiguration的數據,然后添加到容器里邊。

最后我們會默認加載113個默認的配置類:

有興趣的同學可以去翻一下這些文件以及配置類哦:

1.3總結

@SpringBootApplication等同于下面三個注解:

@SpringBootConfiguration

@EnableAutoConfiguration

@ComponentScan

其中@EnableAutoConfiguration是關鍵(啟用自動配置),內部實際上就去加載META-INF/spring.factories文件的信息,然后篩選出以EnableAutoConfiguration為key的數據,加載到IOC容器中,實現自動配置功能!

官網文檔參考:

https://docs.spring.io/spring-boot/docs/2.2.0.BUILD-SNAPSHOT/reference/html/using-spring-boot.html#using-boot-structuring-your-code

英語不好的同學可以像我一樣,對照著來看:

最后
樂于輸出干貨的Java技術公眾號:Java3y。公眾號內有200多篇原創(chuàng)技術文章、海量視頻資源、精美腦圖,不妨來關注一下!

覺得我的文章寫得不錯,不妨點一下!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://www.ezyhdfw.cn/yun/73205.html

相關文章

  • SpringBoot原理深入篇

    摘要:啟動原理和執(zhí)行原理分析一的啟動原理我們打開,注意看下面兩個依賴我們第一步是繼承了父項目,然后在添加啟動器的依賴,項目就會自動給我們導入關于項目所需要的配置和。 上一篇我們看到,我們很輕松的完成了項目的構建,那么SpringBoot是如何做到的呢,在使用的使用又有哪些通用配置和注意事項呢? 其實SpringBoot給我們做了大量的自動配置功能,我們只需要引入對應的啟動器就可以直接使用,作...

    gotham 評論0 收藏0
  • 【Java入門】SpringBoot自動配置原理

    摘要:作者譚淼一運行原理的運行是由注解提供的。完成自動配置類。自動配置類主要作用是的配置核心,它會寫在中,告知在啟動時去讀取該類并根據該類的規(guī)則進行配置。會檢測是否存在類類會查看是否開啟該自動配置。 作者:譚淼 一、運行原理 Spring Boot的運行是由注解@EnableAutoConfiguration提供的。 @Target({ElementType.TYPE}) @Retentio...

    468122151 評論0 收藏0
  • java-study-springboot-基礎學習-04-自動配置原理

    摘要:即,根據包依賴,添加自動配置。會讀取的核心配置文件中的配置備注的條件注解 SpringBoot自動配置 1、自動配置之spring.factories showImg(https://segmentfault.com/img/bVbjyDr?w=693&h=130); showImg(https://segmentfault.com/img/bVbjyDs?w=409&h=184); ...

    elva 評論0 收藏0
  • 這樣講 SpringBoot 自動配置原理,你應該能明白了吧

    摘要:這里有一個參數,主要是用來指定該配置項在配置文件中的前綴。創(chuàng)建一個配置類,里面沒有顯式聲明任何的,然后將剛才創(chuàng)建的導入。創(chuàng)建實現類,返回的全類名。創(chuàng)建實現類,實現方法直接手動注冊一個名叫的到容器中。前言 小伙伴們是否想起曾經被 SSM 整合支配的恐懼?相信很多小伙伴都是有過這樣的經歷的,一大堆配置問題,各種排除掃描,導入一個新的依賴又得添加新的配置。自從有了 SpringBoot 之后,咋...

    cc17 評論0 收藏0
  • SpringBoot | 自動配置原理

    摘要:下班后閑著無聊看了下中的自動配置,把我的理解跟大家說下。上述的每一個自動配置類都有自動配置功能,也可在配置文件中自定義配置。 微信公眾號:一個優(yōu)秀的廢人。如有問題,請后臺留言,反正我也不會聽。 前言 這個月過去兩天了,這篇文章才跟大家見面,最近比較累,大家見諒下。下班后閑著無聊看了下 SpringBoot 中的自動配置,把我的理解跟大家說下。 配置文件能寫什么? 相信接觸過 Sprin...

    KitorinZero 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<