javascript
自动配置原理---SpringBoot
自動配置原理
配置文件到底能寫什么?怎么寫?
SpringBoot官方文檔中有大量的配置,我們無法全部記住
分析自動配置原理
我們以**HttpEncodingAutoConfiguration(Http編碼自動配置)**為例解釋自動配置原理;
//表示這是一個配置類,和以前編寫的配置文件一樣,也可以給容器中添加組件; @Configuration //啟動指定類的ConfigurationProperties功能;//進入這個HttpProperties查看,將配置文件中對應(yīng)的值和HttpProperties綁定起來;//并把HttpProperties加入到ioc容器中 @EnableConfigurationProperties({HttpProperties.class}) //Spring底層@Conditional注解//根據(jù)不同的條件判斷,如果滿足指定的條件,整個配置類里面的配置就會生效;//這里的意思就是判斷當前應(yīng)用是否是web應(yīng)用,如果是,當前配置類生效 @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 {//他已經(jīng)和SpringBoot的配置文件映射了private final Encoding properties;//只有一個有參構(gòu)造器的情況下,參數(shù)的值就會從容器中拿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;}//。。。。。。。 }一句話總結(jié) :根據(jù)當前不同的條件判斷,決定這個配置類是否生效!
-
一但這個配置類生效;這個配置類就會給容器中添加各種組件;
-
這些組件的屬性是從對應(yīng)的properties類中獲取的,這些類里面的每一個屬性又是和配置文件綁定的;
-
所有在配置文件中能配置的屬性都是在xxxxProperties類中封裝著;
-
配置文件能配置什么就可以參照某個功能對應(yīng)的這個屬性類
我們?nèi)ヅ渲梦募锩嬖囋嚽熬Y,看提示!
精髓
1、SpringBoot啟動會加載大量的自動配置類
2、我們看我們需要的功能有沒有在SpringBoot默認寫好的自動配置類當中;
3、我們再來看這個自動配置類中到底配置了哪些組件;(只要我們要用的組件存在在其中,我們就不需要再手動配置了)
4、給容器中自動配置類添加組件的時候,會從properties類中獲取某些屬性。我們只需要在配置文件中指定這些屬性的值即可;
**xxxxAutoConfigurartion:自動配置類;**給容器中添加組件
xxxxProperties:封裝配置文件中相關(guān)屬性;
了解:@Conditional
了解完自動裝配的原理后,我們來關(guān)注一個細節(jié)問題,自動配置類必須在一定的條件下才能生效;
@Conditional派生注解(Spring注解版原生的@Conditional作用)
作用:必須是@Conditional指定的條件成立,才給容器中添加組件,配置配里面的所有內(nèi)容才生效;
那么多的自動配置類,必須在一定的條件下才能生效;也就是說,我們加載了這么多的配置類,但不是所有的都生效了。
我們怎么知道哪些自動配置類生效?
我們可以通過啟用 debug=true屬性;來讓控制臺打印自動配置報告,這樣我們就可以很方便的知道哪些自動配置類生效;
#開啟springboot的調(diào)試類 debug=truePositive matches:(自動配置類啟用的:正匹配)
Negative matches:(沒有啟動,沒有匹配成功的自動配置類:負匹配)
Unconditional classes: (沒有條件的類)
【演示:查看輸出的日志】
掌握吸收理解原理,即可以不變應(yīng)萬變!
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的自动配置原理---SpringBoot的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 玩游戏电脑配置什么最重要?
- 下一篇: 玩游戏的电脑最主要看哪些配置?