Spring Boot原理剖析

咱們瞭解到 Spring Boot 提供了不少開箱即用的依賴模塊,開發者只要在 Maven 的 pom 文件中添加相關依賴後,Spring Boot 就會針對這個應用自動建立和注入須要的 Spring Bean 到上下文中。spring

這篇,咱們以 FreeMarker 的自動配置爲例,重點講解工做原理與加載過程。由於 FreeMarker 相對而言比較簡單,Spring Boot 源碼中只有三個類,因此做爲案例相對而言比較好理解。springboot

Spring Boot原理剖析
EnableAutoConfiguration 幫助咱們作了什麼
你還記得 @EnableAutoConfiguration 註解麼?app

咱們先來回顧下。ide

@RestController
@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.lianggzone.springboot" })
public class WebMain {
        public static void main(String[] args) throws Exception {
                SpringApplication.run(WebMain.class, args);
        }
}

那麼,如今咱們剖析下 @EnableAutoConfiguration 的源碼。
Spring Boot原理剖析源碼分析

這裏,關鍵在於 @Import 註解導入的 EnableAutoConfigurationImportSelector 類中最爲關鍵的是 getCandidateConfigurations 方法中經過 SpringFactoriesLoader.loadFactoryNames 掃描 spring.factories 文件。
Spring Boot原理剖析spa

如今,咱們在來看下 SpringFactoriesLoader 源碼。
Spring Boot原理剖析3d

忽然,你是否是發現 spring.factories 文件是至關重要呢?對的,Spring Boot 經過掃描這個文件中的內容,判斷有哪些自動配置。以 FreeMarker 爲例,咱們來看下它是如何配置的。
Spring Boot原理剖析code

因此,Spring Boot 經過掃描 spring.factories 文件中的 EnableAutoConfiguration 參數中有哪些自動配置並進行加載。blog

配置參數類 – FreeMarkerProperties
這裏的配置參數,能夠經過application.properties 中直接設置。咱們發現,它的前綴必須是 spring.freemarker。
Spring Boot原理剖析開發

自動配置類 – FreeMarkerAutoConfiguration
核心註解
Spring Boot原理剖析
在《 Spring Boot 揭祕與實戰 源碼分析 - 開箱即用,內藏玄機 》一文,有提到 @ConditionalOnClass 參數中對應的類在 classpath 目錄下存在時,纔會去解析對應的配置類,不然不解析該註解修飾的配置類。

Spring Boot 內部提供了不少自動化配置的類,例如,RedisAutoConfiguration 、MongoRepositoriesAutoConfiguration 、ElasticsearchAutoConfiguration , 這些自動化配置的類會判斷 classpath 中是否存在本身須要的那個類,若是存在則會自動配置相關的配置,不然就不會自動配置,所以,開發者在 Maven 的 pom 文件中添加相關依賴後,這些依賴就會下載不少 jar 包到 classpath 中,有了這些 lib 就會觸發自動化配置,因此,咱們就能很便捷地使用對於的模塊功能了。

此外,還有一個主要的註解是 @EnableConfigurationProperties ,主要用來加載咱們上面提到的配置參數類。

注入 Bean
Spring Boot原理剖析
這個源碼很是好理解,我主要想講2個註解。

第一註解是,@ConditionalOnMissingBean(name = 「freeMarkerViewResolver」),指定當容器沒有指定Bean的狀況下的處理。

第二註解是,@ConditionalOnProperty,指定的屬性是否有指定的值的處理,換句話說,若是在application.properties 沒有配置,默認爲 true,即條件符合。

相關文章
相關標籤/搜索