SpringBoot-自動配置


一、自動配置的核心

一般springboot程序,我們都會在主啟動類上加上@SpringBootApplication注解,@SpringBootApplication是一個復合注解,上面標注了@ComponeScan,@EnableAutoConfiguration,默認開啟了包掃碼和自動配置。

@EnableAutoConfiguration注解上使用@Import導入了一個類,EnableAutoConfigurationImportSelector

EnableAutoConfigurationImportSelector的父類中AutoConfigurationImportSelector

有一個關鍵的方法selectImports(),這個方法會去找classpath下,名為spring.factories配置文件里面的需要自動配置的類列表

這里的factoryClassName就是 org.springframework.boot.autoconfigure.EnableAutoConfiguration ,后面通過classLoader加載spring-boot-autoconfigure.jar META-INF/spring.factories 文件,然后通過

factoryClassName找到對應的自動配置類

 

注:(spring.factories文件自動配置類列表還是很好用的,比如有些時候我們需要排除某個自動配置,而你又不知道它到底有幾個配置類,可以參照這里)

有了自動配置類列表還沒完,springboot需要知道列表里面那些配置是我們需要的,通過什么來判斷呢?springboot最主要是通過了@Conditional家族注解,判斷classpath有沒有某個類,容器中有沒有某個bean,application.yml文件中有沒有某一條屬性並且這個屬性為某個值等等這些條件來判斷,我是否需要裝載這個配置類

下面以elasticsearch為例

springboot要裝載elasticsearch配置需要滿足以下條件:

  • classpath下面必須要有 org.elasticsearch.client.Client  TransportClientFactoryBean  NodeClientFactoryBean 三個class文件
  • 如果springboot上下文中沒有名為 elasticsearchClient 的bean,我們如果配置了這個bean存在於上下文,那么自動配置就不會觸發了

二、@Conditional

看了上面應該知道 ,@Conditional的這些注解是是否啟用自動配置類的關鍵。下圖來自《Spring Boot實戰》一書:

 

三、總結

 簡單來說,Spring Boot的自動配置分為以下幾個步驟:

1、@EnableAutoConfiguration注解開啟自動配置,並找到spring-boot-autoconfigure.jar包里的 META-INF/spring.factories 文件

2、通過factoryClassName找到 META-INF/spring.factories 文件對應的自動配置類列表

3、springboot上下文根據自動配置類里的 @Conditional 家族注解選擇是否要加載這些配置


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM