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

Java SpringBoot自動裝配原理詳解

 更新時間:2021年09月22日 09:43:02   作者:技術(shù)專家--Felix  
這篇文章主要介紹了詳解Spring Boot自動裝配的原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

自動裝配的含義

在SpringBoot程序main方法中,添加@SpringBootApplication或者@EnableAutoConfiguration會自動去maven中讀取每個starter中的spring.factories文件,該文件里配置了所有需要被創(chuàng)建的Spring容器中的bean;

如圖為springboot提供的starter自動配置:

springboot應(yīng)用程序啟動類

啟動類一般通過@SpringBootApplication一個注解即可完成所有啟動工作。

并且啟動類要在項目最外層:

@SpringBootApplication注解分析

SpringBootApplication注解之所以強大的原因是其內(nèi)部已經(jīng)注入了三個注解:

@SpringBootConfiguration

此注解實際上就是@Configuration注解,用來標(biāo)注配置類。

而@Configuration注解,內(nèi)部又有@Component注解, 意味也將會注冊為bean, 其內(nèi)部也可以依賴注入。

@ComponentScan

這個注解也是Spring中的,它用來將指定包下需要裝配的組件掃描出來注冊到容器中。
創(chuàng)建一個配置類,在配置類上添加 @ComponentScan 注解。該注解默認(rèn)會掃描該類所在的包下所有的配置類。

@EnableAutoConfiguration

此注解是自動裝配的核心注解, @EnableAutoConfiguration的內(nèi)部如圖,其中有注解@AutoConfigurationPackage和@Import兩個注解。

可以看到@Import注解內(nèi)有一個類AutoConfigurationImportSelector。這個類(implement ImportSelector),實現(xiàn)了selectImports() 方法,用來篩選被@Import的Configuration類(減去exclude等)。

    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        // 如果AutoConfiguration沒開,返回{}
        if (!isEnabled(annotationMetadata)) {
            return NO_IMPORTS;
        }
        // 將spring-autoconfigure-metadata.properties的鍵值對配置載入到PropertiesAutoConfigurationMetadata對象中并返回
        AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader
                .loadMetadata(this.beanClassLoader);
        // 基于各種配置計算需要import的configuration和exclusion
        AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(autoConfigurationMetadata,
                annotationMetadata);
        return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
    }

可見selectImports()AutoConfigurationImportSelector的核心函數(shù),其核心功能就是獲取spring.factoriesEnableAutoConfiguration所對應(yīng)的Configuration類列表,由@EnableAutoConfiguration注解中的exclude/excludeName參數(shù)篩選一遍,再由AutoConfigurationImportFilter類所有實例篩選一遍,得到最終的用于Import的configuration和exclusion。

另外,還有一個注解@AutoConfigurationPackage, @AutoConfigurationPackage注解的作用是將 添加該注解的類所在的package 作為 自動配置package 進行管理,還有@AutoConfigurationPackage注解的主要作用就是將主程序類所在包及所有子包下的組件到掃描到spring容器中。

因此 在定義項目包結(jié)構(gòu)時,要求定義的包結(jié)構(gòu)非常規(guī)范,項目主程序啟動類要定義在最外層的根目錄位置,然后在根目錄位置內(nèi)部建立子包和類進行業(yè)務(wù)開發(fā),這樣才能夠保證定義的類能夠被組件掃描器掃描

總結(jié)

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

相關(guān)文章

  • 微服務(wù)之Feign的介紹與使用小結(jié)

    微服務(wù)之Feign的介紹與使用小結(jié)

    Feign 是一個聲明式的偽RPC的REST客戶端,它用了基于接口的注解方式,很方便的客戶端配置,Spring Cloud 給 Feign 添加了支持Spring MVC注解,并整合Ribbon及Eureka進行支持負(fù)載均衡,這篇文章主要介紹了微服務(wù)之Feign的介紹與使用,需要的朋友可以參考下
    2022-07-07
  • Java后端調(diào)用微信支付和支付寶支付的詳細(xì)步驟

    Java后端調(diào)用微信支付和支付寶支付的詳細(xì)步驟

    這篇文章主要介紹了Java后端如何調(diào)用微信支付和支付寶支付,涵蓋了基本概念、配置步驟、代碼示例以及注意事項,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Java實現(xiàn)批量下載(打包成zip)的實現(xiàn)

    Java實現(xiàn)批量下載(打包成zip)的實現(xiàn)

    這篇文章主要介紹了Java實現(xiàn)批量下載(打包成zip)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java數(shù)據(jù)結(jié)構(gòu)之鏈表、棧、隊列、樹的實現(xiàn)方法示例

    Java數(shù)據(jù)結(jié)構(gòu)之鏈表、棧、隊列、樹的實現(xiàn)方法示例

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之鏈表、棧、隊列、樹的實現(xiàn)方法,結(jié)合實例形式分析了Java數(shù)據(jù)結(jié)構(gòu)中鏈表、棧、隊列、樹的功能、定義及使用方法,需要的朋友可以參考下
    2019-03-03
  • Java實現(xiàn)數(shù)組反轉(zhuǎn)翻轉(zhuǎn)的方法實例

    Java實現(xiàn)數(shù)組反轉(zhuǎn)翻轉(zhuǎn)的方法實例

    本篇文章主要介紹了Java實現(xiàn)數(shù)組反轉(zhuǎn)翻轉(zhuǎn)的方法實例,詳細(xì)的介紹了3種實現(xiàn)方法,有興趣的可以了解一下。
    2017-04-04
  • 關(guān)于request.getRequestDispatcher().forward()的妙用及DispatcherType對Filter配置的影響

    關(guān)于request.getRequestDispatcher().forward()的妙用及DispatcherType

    這篇文章主要介紹了關(guān)于request.getRequestDispatcher().forward()的妙用及DispatcherType對Filter配置的影響,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Springboot添加支付接口

    Springboot添加支付接口

    這篇文章主要介紹了springboot如何添加支付接口,幫助大家更好得理解和學(xué)習(xí)使用springboot框架,感興趣的朋友可以了解下
    2021-04-04
  • SpringBoot整合SpringSecurityOauth2實現(xiàn)鑒權(quán)動態(tài)權(quán)限問題

    SpringBoot整合SpringSecurityOauth2實現(xiàn)鑒權(quán)動態(tài)權(quán)限問題

    這篇文章主要介紹了SpringBoot整合SpringSecurityOauth2實現(xiàn)鑒權(quán)-動態(tài)權(quán)限,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 使用SpringBoot中整合Redis

    使用SpringBoot中整合Redis

    這篇文章主要介紹了使用SpringBoot中整合Redis,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 詳解springboot啟動時是如何加載配置文件application.yml文件

    詳解springboot啟動時是如何加載配置文件application.yml文件

    這篇文章主要介紹了詳解springboot啟動時是如何加載配置文件application.yml文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評論

金寨县| 峨山| 隆安县| 淳安县| 德州市| 寿光市| 梁平县| 工布江达县| 即墨市| 石城县| 新丰县| 翁牛特旗| 鄂温| 平山县| 天峻县| 昭觉县| 福泉市| 荆州市| 卢龙县| 健康| 泽库县| 房产| 安新县| 蓬安县| 阿拉尔市| 介休市| 卓尼县| 仁怀市| 浦城县| 新密市| 信宜市| 通州区| 三原县| 云南省| 辰溪县| 西青区| 汤原县| 南丰县| 宁南县| 修文县| 濮阳县|