SpringBoot-04-自動配置原理再理解
4. 自動配置原理再理解
配置檔案到底能寫什麼?怎麼寫?SpringBoot官方文件有大量的配置,但是難以全部記住。
分析自動配置原理
官方文件
我們以HttpEncodingAutoConfiguration(Http編碼自動配置)為例解釋自動配置原理;
//表示這是一個配置類,和以前編寫的配置檔案一樣,也可以給容器中新增元件;
@Configuration
//啟動指定類的ConfigurationProperties功能;
//進入這個HttpProperties檢視,將配置檔案中對應的值和HttpProperties繫結起來;
//並把HttpProperties加入到ioc容器中
@EnableConfigurationProperties({HttpProperties.class})
//Spring底層@Conditional註解
//根據不同的條件判斷,如果滿足指定的條件,整個配置類裡面的配置就會生效;
//這裡的意思就是判斷當前應用是否是web應用,如果是,當前配置類生效
@ConditionalOnWebApplication(
type = Type.SERVLET
)
//判斷當前專案有沒有這個類CharacterEncodingFilter;SpringMVC中進行亂碼解決的過濾器;
@ConditionalOnClass({CharacterEncodingFilter.class})
//判斷配置檔案中是否存在某個配置:spring.http.encoding.enabled;
//如果不存在,判斷也是成立的
//即使我們配置檔案中不配置pring.http.encoding.enabled=true,也是預設生效的;
@ConditionalOnProperty(
prefix = "spring.http.encoding",
value = {"enabled"},
matchIfMissing = true
)
public class HttpEncodingAutoConfiguration {
//他已經和SpringBoot的配置檔案對映了
private final Encoding properties;
//只有一個有參構造器的情況下,引數的值就會從容器中拿
public HttpEncodingAutoConfiguration(HttpProperties properties) {
this.properties = properties.getEncoding();
}
//給容器中新增一個元件,這個元件的某些值需要從properties中獲取
@Bean
@ConditionalOnMissingBean //判斷容器沒有這個元件?
public CharacterEncodingFilter characterEncodingFilter() {
CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
filter.setEncoding(this.properties.getCharset().name());
filter.setForceRequestEncoding(this.properties.shouldForce(org.springframework.boot.autoconfigure.http.HttpProperties.Encoding.Type.REQUEST));
filter.setForceResponseEncoding(this.properties.shouldForce(org.springframework.boot.autoconfigure.http.HttpProperties.Encoding.Type.RESPONSE));
return filter;
}
}
一句話總結:
根據當前不同的條件判斷,決定這個配置類是否生效!
- 一旦配置類生效,它就會給容器中新增各種元件;
- 這些元件的屬性是從對應的properties類中獲取的,且每個屬性又和配置檔案繫結;
所有在配置檔案中能配置的屬性都是xxxxProperties類中封裝著
;- 配置檔案能配置什麼就參考某個功能對應的這個屬性類;
精髓
- SpringBoot啟動會載入大量的自動配置類:
xxxProperties
- 看我們需要的功能有沒有在SpringBoot預設寫好的自動配置類中;
- 再看這個自動配置類中到底配置了哪些元件(只要我們用的元件存在其中,那麼就不需要手動配置);
- 給容器中的自動配置類新增元件的時候,會從properties類中獲取某些屬性(我們可以在配置檔案中指定);
xxxxAutoConfiguration
:自動配置類 ;給容器新增元件
xxxxProperties
:封裝配置檔案中相關屬性
瞭解:@Conditional
我們瞭解了 自動配置類必須在一定條件下才能生效!
@Conditional派生註解
作用:必須是@Conditional指定的條件成立,才會給容器新增元件,配置配裡面的所有內容才會生效!
我們怎麼知道哪些自動配置類生效了呢?
啟動debug=true
屬性;來讓控制檯列印自動配置報告
# 開啟springboot的除錯類
debug=true
Positive matches:(自動配置類啟動的:正匹配)
Negative matches:(沒有匹配成功的:負匹配)
Unconditional classes:(沒有條件的類)
相關文章
- SpringBoot自動配置原理解析Spring Boot
- (第四講)Spring Boot 自動化配置原理解析Spring Boot
- SpringBoot | 自動配置原理Spring Boot
- SpringBoot自動配置原理Spring Boot
- Spring Boot 自動配置原理Spring Boot
- springboot 自動配置原理Spring Boot
- PHP 自動載入功能原理解析PHP
- springboot_自動配置原理Spring Boot
- SpringBoot的自動配置原理Spring Boot
- Spring Boot核心原理-自動配置Spring Boot
- [spring-rabbit]自動配置原理Spring
- SpringBoot自動裝配原理解析Spring Boot
- Spring Boot自動配置原理、實戰Spring Boot
- springboot自動配置原理和啟動流程Spring Boot
- SpringBoot2.4.0中嵌入式servlet容器的自動配置以及啟動原理(自我理解)Spring BootServlet
- 深入理解Spring框架的自動裝配原理Spring框架
- Spring Boot自動配置原理與實踐(一)Spring Boot
- Spring Boot自動配置原理與實踐(二)Spring Boot
- log4j2 自動刪除過期日誌檔案配置及實現原理解析
- Shiro原理解析(三)--再談過濾器過濾器
- 圖解原始碼 | SpringBoot中自動配置原理圖解原始碼Spring Boot
- SpringBoot自動配置原理原始碼級別分析Spring Boot原始碼
- Spring Boot 自動配置的原理、核心註解以及利用自動配置實現了自定義 Starter 元件Spring Boot元件
- 笑死,面試官又問我SpringBoot自動配置原理面試Spring Boot
- SpringBoot 自動配置原理,翻原始碼看一下Spring Boot原始碼
- 自動化測試理解
- Android元件化專案自動初始化外掛Initer原理解析Android元件化
- Android熱補丁之Robust(二)自動化補丁原理解析Android
- 這一次搞懂SpringBoot核心原理(自動配置、事件驅動、Condition)Spring Boot事件
- 好程式設計師Java培訓分享SpringBoot -自動配置原理程式設計師JavaSpring Boot
- 這樣講 SpringBoot 自動配置原理,你應該能明白了吧Spring Boot
- Ubuntu自動啟動配置指令碼Ubuntu指令碼
- vim ctags 配置 自動命令
- 如何理解Java中的自動拆箱和自動裝箱?Java
- springboot之啟動原理解析Spring Boot
- 登峰造極之小帕EPV再顯身手,安全實現apollo配置中心自動改密!
- SpringBoot原理深入及原始碼剖析(一) 依賴管理及自動配置Spring Boot原始碼
- k8s 自動擴縮容HPA原理及adapter配置詳解?K8SAPT