<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot自動配置原理

          共 1770字,需瀏覽 4分鐘

           ·

          2022-02-20 19:57

          微信搜索:碼農(nóng)StayUp

          主頁地址:https://gozhuyinglong.github.io

          源碼分享:https://github.com/gozhuyinglong/blog-demos

          Spring Boot 的自動配置可以根據(jù)添加的jar依賴,自動配置 Spring Boot 應(yīng)用程序。例如,我們想要使用Redis,直接在POM文件中增加spring-boot-starter-data-redis依賴,然后我們配置下連接信息就可以使用了。

          那么Spring Boot 是如何實現(xiàn)自動配置的呢?下面通過源碼分析,來看自動配置的原理。

          源碼分析

          @SpringBootApplication注解

          我們知道在Spring Boot 項目中,都會有一個@SpringBootApplication注解,它標(biāo)識了該項目的啟動類。該注解是一個組合注解,其中有一個@EnableAutoConfiguration注解,用于啟用自動配置。

          @EnableAutoConfiguration注解

          我們進入@EnableAutoConfiguration注解可以看到,通過@Import注解導(dǎo)入了AutoConfigurationImportSelector類,從類名可以看出,該類是通過實現(xiàn)ImportSelector接口來導(dǎo)入配置類的。

          在之前的《@Import注解:導(dǎo)入配置類的四種方式&源碼解析》文章中,介紹了@Import可以通過ImportSelector的方式導(dǎo)入配置類,建議選看一下。

          AutoConfigurationImportSelector類

          可以看出,該類實現(xiàn)了DeferredImportSelector接口。

          那么該類是通過selectImports()方法導(dǎo)入配置類的,找到該方法。進入getAutoConfigurationEntry()方法。

          該方法是獲取配置類的入口方法,我們進入getCandidateConfigurations()方法。

          該方法用于獲取所有配置類的名字,最終是通過SpringFactoriesLoader加載器來獲取的。

          SpringFactoriesLoader加載器

          該類是 Spring 核心提供的一種類加載方式,用于加載資源文件META-INF/spring.factories中配置的類。loadFactoryNames()方法用于加載所有類的名字。

          進入loadSpringFactories()靜態(tài)方法,用于加載資源文件META-INF/spring.factories中配置的類。加載的類會放到緩存中,下次會直接從緩存中獲取。

          指定資源文件的名稱:META-INF/spring.factories

          META-INF/spring.factories資源文件

          該資源可能出現(xiàn)在多個JAR文件中,而自動配置類的資源文件位于spring-boot-autoconfigure包下。

          這個資源文件中,包含了所有的自動配置類。文檔內(nèi)容必須是Properties格式,其中鍵是接口或抽象類的全類名,值是用逗號分隔的實現(xiàn)類列表,如下圖:

          如何通過引入依賴實現(xiàn)自動配置的?

          我們以JdbcTemplateAutoConfiguration配置類為例,看下配置類里到底做了什么,以及它是如何做到通過引入依賴的方式,來實現(xiàn)自動配置的。

          其實也很簡單,配置類中主要使用了@ConditionalOnClass注解,該注解會判斷指定的類是否在classpath資源包內(nèi),如果都存在的話,才會構(gòu)建當(dāng)前配置類。

          我們看到上圖中org.springframework.jdbc.core.JdbcTemplate類不存在,那么該配置類也不會被注入到IOC容器中,我們也就無法使用。

          我們通過引入spring-boot-starter-data-jdbc依賴,那類也會被找到,配置類也就生效了。

          這就是Spring Boot 自動配置的原理了~

          推薦閱讀


          瀏覽 75
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久在线播放 | 这里只有精品视频99 | 中文字幕无码高清的A V不卡的A V | 手机观看AV | 久久国产劲暴∨内射新川 |