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

Java SpringBoot自動(dòng)裝配原理詳解

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

自動(dòng)裝配的含義

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

如圖為springboot提供的starter自動(dòng)配置:

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

啟動(dòng)類一般通過(guò)@SpringBootApplication一個(gè)注解即可完成所有啟動(dòng)工作。

并且啟動(dòng)類要在項(xiàng)目最外層:

@SpringBootApplication注解分析

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

@SpringBootConfiguration

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

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

@ComponentScan

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

@EnableAutoConfiguration

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

最新評(píng)論

蓬安县| 修武县| 湾仔区| 黄平县| 临漳县| 鄱阳县| 青州市| 古蔺县| 西和县| 江都市| 丰原市| 吉木乃县| 黄冈市| 婺源县| 阳谷县| 呼伦贝尔市| 微山县| 五华县| 盘山县| 防城港市| 惠来县| 德钦县| 英德市| 隆化县| 龙游县| 岳阳县| 斗六市| 米泉市| 庐江县| 松桃| 泰顺县| 嘉禾县| 台北县| 怀远县| 章丘市| 施甸县| 黄陵县| 福海县| 张掖市| 陆川县| 舒兰市|