Spring Boot--自動配置原理

引言

做爲Spring Boot的精髓,自動配置原理的工做過程每每只有在「面試」的時候才能用得上,可是若是在工做中你可以深刻的理解Spring Boot的自動配置原理,將無往不利。面試

Spring Boot的出現,得益於「習慣優於配置」的理念,沒有繁瑣的配置、難以集成的內容(大多數流行第三方技術都被集成),這是基於Spring 4.x提供的按條件配置Bean的能力。spring

springboot的配置文件 :application.properties 或 application.ymlspringboot

示例:圖片那麼問題來了:這些配置是如何在Spring Boot項目中生效的呢?那麼接下來,就須要聚焦本篇博客的主題:自動配置工做原理或者叫實現方式。app

Spring Boot關於自動配置的源碼在spring-boot-autoconfigure-x.x.x.x.jar中:ide

如圖:圖片Spring Boot的啓動類上有一個@SpringBootApplication註解,這個註解是Spring Boot項目必不可少的註解,也是springboot自動配置的核心spring-boot

1.@Configuration的註解類標識這個類可使用Spring IoC容器做爲bean定義的來源。@Bean註解告訴Spring,一個帶有@Bean的註解方法將返回一個對象,該對象應該被註冊爲在Spring應用程序上下文中的bean。this

二、@EnableAutoConfiguration:可以自動配置spring的上下文,試圖猜想和配置你想要的bean類,一般會自動根據你的類路徑和你的bean定義自動配置。spa

三、@ComponentScan:會自動掃描指定包下的所有標有@Component的類,並註冊成bean,固然包括@Component下的子註解@Service,@Repository,@Controller。圖片@SpringBootApplication是一個複合註解或派生註解,在@SpringBootApplication中有一個註解@EnableAutoConfiguration,翻譯的話就是開啓自動配置 @Configuration //表示這是一個配置類,也能夠給容器中添加組件圖片咱們查看@EnableAutoConfiguration註解 ,會發現他引入了個 類
AutoConfigurationImportSelector.class
圖片進入AutoConfigurationImportSelector類中,咱們會發現 有這個方法 如圖翻譯

protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {        List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());        Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");        return configurations;    }

出現報錯 從中咱們能夠推出 @EnableAutoConfiguration註解 如何自動裝配了 "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct." 翻譯:在META-INF/spring.factories中找不到自動配置類。若是使用自定義打包,請確保文件正確無誤。orm

在保重咱們找到的了對應的spring.factories 文件圖片圖片打開以後,這個@EnableAutoConfiguration註解經過@SpringBootApplication被間接的標記在了Spring Boot的啓動類上。在SpringApplication.run(...)的內部就會執行selectImports()方法,找到全部JavaConfig自動配置類的全限定名對應的class,而後將全部自動配置類加載到Spring容器中。

相關文章
相關標籤/搜索