Spring Boot 揭祕與實戰 源碼分析 - 工做原理剖析

結合《Spring Boot 揭祕與實戰 源碼分析 - 開箱即用,內藏玄機》一文,咱們再來深刻的理解 Spring Boot 的工做原理。javascript

博客地址:blog.720ui.com/java

在《Spring Boot 揭祕與實戰 源碼分析 - 開箱即用,內藏玄機》一文,咱們瞭解到 Spring Boot 提供了不少開箱即用的依賴模塊,開發者只要在 Maven 的 pom 文件中添加相關依賴後,Spring Boot 就會針對這個應用自動建立和注入須要的 Spring Bean 到上下文中。spring

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

EnableAutoConfiguration 幫助咱們作了什麼

你還記得 @EnableAutoConfiguration 註解麼?微信

咱們先來回顧下。app

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

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


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

如今,咱們在來看下 SpringFactoriesLoader 源碼。

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

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

配置參數類 – FreeMarkerProperties

這裏的配置參數,能夠經過application.properties 中直接設置。咱們發現,它的前綴必須是 spring.freemarker。
ui

自動配置類 – FreeMarkerAutoConfiguration

核心註解

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

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

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

注入 Bean


這個源碼很是好理解,我主要想講2個註解。

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

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

擴展閱讀

Spring Boot 揭祕與實戰 本身實現一個簡單的自動配置模塊

(完)

更多精彩文章,盡在「服務端思惟」微信公衆號!

相關文章
相關標籤/搜索