SpringBoot——SpringBoot自動配置原理(2-2-5版本)

SpringBoot 自動配置原理

​ 作爲 SpringBoot 的精髓,自動配置是“習慣優於配置”理念的體現,瞭解 SpringBoot 自動配置的原理也是學習 SpringBoot 過程中不可繞開的重要內容

從啓動類開始說起

​ 要了解自動配置原理,我們首先要找到自動配置的入口,或者說是開關,學習過 SpringBoot 的同學都知道,當我們新建一個 SpringBoot 項目時,而這個空項目一定會包含一個xxxxxxxxAutoconfigApplication.java的類,這是 SpringBoot 的啓動類,而這個類一定存在@SpringBootApplication這個註解,那似乎就說明了這個註解和自動配置一定存在某些關係
在這裏插入圖片描述
​ 我們ctrl + 左鍵進入這個註解,會發現這是一個複合註解,一個很明顯的名字@EnableAutoConfiguration啓用自動配置就在其中,那很明顯了,這個註解就是我們自動配置的開關所在,我們再進入這個註解
在這裏插入圖片描述
​ 隨後我們會發現,@EnableAutoConfiguration是一個很簡單的配置類,我們可以看到它存在一個@Import(AutoConfigurationImportSelector.class)註解,在使用註解配置 Spring 時,我們知道@Import註解是用來定義子配置文件的,並且從它導入的子配置類的名稱(自動配置導入選擇器)我們可以確定,有關自動配置的核心代碼就在這個子配置類中

​ 通過查看這個類我們可以發現,SpringBoot 在selectImports方法中,通過調用同類下的getAutoConfigurationEntry方法來獲取所謂的自動配置條目,那我們就繼續來看一下這個方法
在這裏插入圖片描述
​ 這個方法中,我們可以注意到有一個configurations的變量,很明顯,這是一個包含了配置的集合,這樣我們就又找到了一個getCandidateConfigurations(得到候選的配置)方法,而在這個方法中,SpringBoot 又調用了SpringFactoriesLoader.loadFactoryNames,看起來我們離最最核心的代碼越來越近了!點它!
在這裏插入圖片描述
​ 這時我們來到了SpringFactoriesLoader.java,在這個類中我們找到了loadFactoryNames方法,發現它關聯了loadSpringFactories方法,這個方法中又一大坨代碼
在這裏插入圖片描述
​ 我們可以看到,在loadSpringFactories這個方法中,SpringBoot 從FACTORIES_RESOURCE_LOCATION中獲取值,通過獲取到的值,將其中所有的條目都放入配置中,我們看一下這個值是個什麼東西
在這裏插入圖片描述
​ 終於一坨一坨的代碼變成了一個字符串,原來,SpringBoot 是從具有"META-INF/spring.factories"目錄的 jar 包下獲取自動配置資源的,我們找到spring-boot-auto-configure這個 jar 包,就會在它的目錄下找到一個上述的路徑,並找到spring.factories文件
在這裏插入圖片描述
​ 從上邊的圖片可以看到,這個文件中包含了很多什麼什麼自動配置類,原來,SpringBoot 把很多常用配置都已經編寫成自動配置類,在啓動項目時,SpringBoot 會通過掃描這個配置文件,獲取到所有的自動配置類並加載到 Spring 容器中供我們使用

​ 那麼自動配置類是如何被使用的呢?今天有點困了,下一篇再更!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章