結合《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 註解麼?微信
咱們先來回顧下。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 的源碼。
源碼分析
這裏的配置參數,能夠經過application.properties 中直接設置。咱們發現,它的前綴必須是 spring.freemarker。
ui
在《Spring Boot 揭祕與實戰 源碼分析 - 開箱即用,內藏玄機》一文,有提到 @ConditionalOnClass 參數中對應的類在 classpath 目錄下存在時,纔會去解析對應的配置類,不然不解析該註解修飾的配置類。spa
Spring Boot 內部提供了不少自動化配置的類,例如,RedisAutoConfiguration 、MongoRepositoriesAutoConfiguration 、ElasticsearchAutoConfiguration , 這些自動化配置的類會判斷 classpath 中是否存在本身須要的那個類,若是存在則會自動配置相關的配置,不然就不會自動配置,所以,開發者在 Maven 的 pom 文件中添加相關依賴後,這些依賴就會下載不少 jar 包到 classpath 中,有了這些 lib 就會觸發自動化配置,因此,咱們就能很便捷地使用對於的模塊功能了。3d
此外,還有一個主要的註解是 @EnableConfigurationProperties ,主要用來加載咱們上面提到的配置參數類。
第一註解是,@ConditionalOnMissingBean(name = "freeMarkerViewResolver"),指定當容器沒有指定Bean的狀況下的處理。
第二註解是,@ConditionalOnProperty,指定的屬性是否有指定的值的處理,換句話說,若是在application.properties 沒有配置,默認爲 true,即條件符合。
(完)
更多精彩文章,盡在「服務端思惟」微信公衆號!