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

SpringBoot之自動(dòng)裝配原理及解讀

 更新時(shí)間:2026年02月03日 08:43:10   作者:追JAVA的小菜鳥  
Spring Boot自動(dòng)裝配原理:通過(guò)@SpringBootApplication、@ComponentScan和@EnableAutoConfiguration注解,掃描主配置類所在包及其子包下的類,并加載符合條件的自動(dòng)配置類,實(shí)現(xiàn)Spring IOC容器的自動(dòng)配置

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

spring支持兩種bean的配置方式

基于xml文件和JavaConfig

主啟動(dòng)類上的注解@SpringBootApplication

@SpringBootApplication里有三個(gè)重要注解

@SpringBootConfiguration

  • 作用: 聲明定義Bean,嵌套了@Component組件

@SpringBootConfiguration源碼是@Configuration:表示該類為主配置類,可用來(lái)裝配bean

@Configuration的源碼是@Component:說(shuō)明Spring的配置類也是Spring的一個(gè)組件。

它是JavaConfig形式的基于Spring IOC容器的配置類使用的一種注解。SpringBoot本質(zhì)上就是一個(gè)Spring應(yīng)用,通過(guò)這個(gè)注解來(lái)加載IOC容器的配置。所以在啟動(dòng)類里面標(biāo)注了@Configuration,意味著它也是一個(gè)IOC容器的配置類

@ComponentScan

  • 作用:掃描主配置類包的所有包下的類,相當(dāng)于xml配置文件中的context:component-scan。eg:pojo中的User類

@EnableAutoConfiguration(重點(diǎn)?。。。?/h3>
  • 作用:開啟自動(dòng)裝配類

@EnableAutoConfiguration里有兩個(gè)重要注解

@AutoConfigurationPackage:自動(dòng)配置包

  • 作用:給Spring容器中導(dǎo)入一個(gè)Registrar注冊(cè)器組件

@AutoConfigurationPackage和@ComponentScan一樣,也是將主配置類所在的包及其子包里面的組件掃描到IOC容器中,但是區(qū)別是

  • @AutoConfigurationPackage掃描@Enitity、@MapperScan等第三方依賴的注解
  • @ComponentScan只掃描@Controller/@Service/@Component/@Repository這些常見(jiàn)注解。所以這兩個(gè)注解掃描的對(duì)象是不一樣的。

@Import(AutoConfigurationImportSelector.class)——核心注解

作用:通過(guò)import導(dǎo)入第三方提供的bean的配置類:AutoConfigurationImportSelector:給容器中導(dǎo)入組件

該類中有selectImports()方法,調(diào)用了getAutoConfigurationEntry()

其下又調(diào)用了getCandidateConfigurations()

getCandidateConfigurations()中SpringFactoriesLoader.loadFactoryNames()方法

SpringFactoriesLoader.loadFactoryNames()中傳入?yún)?shù)EnableAutoConfiguration.class

作用:掃描所有jar包類路徑下的META-INF/spring.factories文件,將掃描到的這些文件包裝成properties對(duì)象,從properties中獲取到EnableAutoConfiguration.class類名對(duì)應(yīng)的值,將這些值添加到容器中,用這些類做自動(dòng)配置功能

在spring-boot-autoconfigure-.jar包中找到spring.factories文件

其中spring.factories文件是一組組的key=value的形式

key=接口 value=接口實(shí)現(xiàn)類(多個(gè),逗號(hào)隔開)

以HttpEncodingAutoConfiguration為例解釋:

  • @Configuration(proxyBeanMethods = false) 表示該類為配置類
  • @EnableConfigurationProperties(ServerProperties.class) 將配置文件中設(shè)置的值與properties中的屬性綁定,將組件添加到IOC容器
  • @Conditionalxxx:若滿足不同的條件,則配置類中的配置生效
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@ConditionalOnClass(CharacterEncodingFilter.class)
@ConditionalOnProperty(prefix = “server.servlet.encoding”, value = “enabled”, matchIfMissing = true)

其中ServerProperties.class中的屬性值,可與xx.yaml配置文件綁定并修改 

精髓:根據(jù)當(dāng)前配置類的條件判斷配置類是否生效,若生效,則添加各種組件,會(huì)從properties類中獲取屬性,可以在配置文件xxx.yaml中設(shè)置屬性的值

  • Properties類:封裝配置文件的相關(guān)屬性。
  • AutoConfiguration類:自動(dòng)配置類,添加到IOC容器中。

SpringFactoriesLoader

作用:從classpath/META-INF/spring.factories文件中,根據(jù)key來(lái)加載對(duì)應(yīng)的類到spring IOC容器中。

自動(dòng)裝配過(guò)程

  • 通過(guò)各種注解實(shí)現(xiàn)了類與類之間的依賴關(guān)系,容器在啟動(dòng)的時(shí)候SpringApplication.run(),調(diào)用EnableAutoConfigurationImportSelector.class的selectImports方法
  • selectImports方法調(diào)用SpringFactoriesLoader.loadFactoryNames方法掃描jar包類路徑下的META-INF/spring.factories文件下,獲取BeanConfiguration列表
  • loadFactoryNames方法會(huì)讀取spring.factories中EnableAutoConfiguration.class類名對(duì)應(yīng)的值
  • 根據(jù)這些類上的注解判斷,若條件滿足,則該配置類生效,將配置文件中自己設(shè)置的屬性值配置到對(duì)應(yīng)的配置類中,最后注入到IOC容器中實(shí)現(xiàn)自動(dòng)配置

總結(jié)

SpringBoot啟動(dòng)的時(shí)候通過(guò)@EnableAutoConfiguration注解找到META-INF/spring.factories文件中的所有自動(dòng)配置類,并對(duì)其加載,這些自動(dòng)配置類都是以AutoConfiguration結(jié)尾來(lái)命名的。

它實(shí)際上就是一個(gè)JavaConfig形式的IOC容器配置類,通過(guò)以Properties結(jié)尾命名的類中取得在全局配置文件中配置的屬性,如server.port。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 手把手教你SpringBoot快速集成Swagger的配置過(guò)程

    手把手教你SpringBoot快速集成Swagger的配置過(guò)程

    這篇文章主要介紹了手把手教你SpringBoot快速集成Swagger的配置過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • HashMap底層數(shù)據(jù)結(jié)構(gòu)詳細(xì)解析

    HashMap底層數(shù)據(jù)結(jié)構(gòu)詳細(xì)解析

    這篇文章主要介紹了HashMap底層數(shù)據(jù)結(jié)構(gòu)詳細(xì)解析,HashMap作為開發(fā)中常用的數(shù)據(jù)結(jié)構(gòu),也是面試中經(jīng)常被問(wèn)的知識(shí)點(diǎn),因此作為開發(fā)者應(yīng)該盡可能多的理解其底層的數(shù)據(jù)結(jié)構(gòu),需要的朋友可以參考下
    2023-11-11
  • SpringBoot整合FTP使用示例教程

    SpringBoot整合FTP使用示例教程

    這篇文章主要介紹了SpringBoot整合FTP使用示例教程,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • SpringMVC中處理靜態(tài)資源的過(guò)程詳解

    SpringMVC中處理靜態(tài)資源的過(guò)程詳解

    本文給大家介紹SpringMVC中處理靜態(tài)資源的過(guò)程,結(jié)合示例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • Java中常見(jiàn)的查找算法與排序算法總結(jié)

    Java中常見(jiàn)的查找算法與排序算法總結(jié)

    數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)存儲(chǔ)的方式,算法是數(shù)據(jù)計(jì)算的方式。所以在開發(fā)中,算法和數(shù)據(jù)結(jié)構(gòu)息息相關(guān)。本文為大家整理了Java中常見(jiàn)的查找與排序算法的實(shí)現(xiàn),需要的可以參考一下
    2023-03-03
  • Java終止正在運(yùn)行的線程的三種方法

    Java終止正在運(yùn)行的線程的三種方法

    停止一個(gè)線程意味著在任務(wù)處理完任務(wù)之前停掉正在做的操作,也就是放棄當(dāng)前的操作,停止一個(gè)線程可以用Thread.stop()方法,但最好不要用它,本文給大家介紹了Java終止正在運(yùn)行的線程的三種方法,需要的朋友可以參考下
    2025-03-03
  • Java中Spring對(duì)事務(wù)的支持詳解

    Java中Spring對(duì)事務(wù)的支持詳解

    這篇文章主要介紹了Java中Spring對(duì)事務(wù)的支持詳解,Spring對(duì)事務(wù)的支持有兩種方式,一是自己編寫事務(wù),精確控制事務(wù)的邊界,二是采用聲明事務(wù)的方式,使用AOP來(lái)完成,需要的朋友可以參考下
    2023-07-07
  • Java編程中的HashSet和BitSet詳解

    Java編程中的HashSet和BitSet詳解

    這篇文章主要介紹了Java編程中的HashSet和BitSet詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Java異常java.lang.UnsatisfiedLinkError: no opencv_java320 in java.library.path的解決

    Java異常java.lang.UnsatisfiedLinkError: no opencv_ja

    這篇文章主要介紹了Java異常java.lang.UnsatisfiedLinkError: no opencv_java320 in java.library.path的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • java Person,Student,GoodStudent 三個(gè)類的繼承、構(gòu)造函數(shù)的執(zhí)行

    java Person,Student,GoodStudent 三個(gè)類的繼承、構(gòu)造函數(shù)的執(zhí)行

    這篇文章主要介紹了java Person,Student,GoodStudent 三個(gè)類的繼承、構(gòu)造函數(shù)的執(zhí)行,需要的朋友可以參考下
    2017-02-02

最新評(píng)論

葵青区| 成都市| 正安县| 沙田区| 泌阳县| 和政县| 苏尼特左旗| 古丈县| 临城县| 凤阳县| 吉隆县| 牙克石市| 张北县| 长岛县| 南阳市| 清新县| 松潘县| 黄平县| 天水市| 伊吾县| 永靖县| 龙南县| 新昌县| 济南市| 抚松县| 响水县| 凤城市| 阜平县| 临夏县| 宁明县| 南靖县| 盐源县| 泌阳县| 神木县| 茂名市| 横峰县| 广宗县| 泗水县| 琼中| 南溪县| 明光市|