日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot - 自动配置实例解读

發布時間:2025/3/21 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot - 自动配置实例解读 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • Pre
  • 啟用 debug=true輸出自動配置
  • HttpEncodingAutoConfiguration
    • 什么情況下,Spring Boot 會自動裝配 HttpEncodingAutoConfiguration
    • @EnableConfigurationProperties & ServerProperties
    • 是否生效演示
  • 原理流程圖


Pre

Spring Boot - 自動配置實現原理中我們說了自動裝配的原理,這里我們繼續接著說,用一個自動裝配的例子,來感受下Spring Boot 的魅力


啟用 debug=true輸出自動配置

我們新建一個SpringBoot的工程,在application.properties中 開啟屬性設置

debug=true

啟動工程后,輸出的格式如下

============================ CONDITIONS EVALUATION REPORT ============================Positive matches:---**表示自動配置類啟用的** ----------------- ...省略...Negative matches:---**沒有匹配成功的自動配置類** ----------------- ...省略...

我們找個看看吧


HttpEncodingAutoConfiguration

  • @Configuration(proxyBeanMethods = false)

    標記了@Configuration Spring底層會給配置創建cglib動態代理。 作用:就是防止每次調用本類的Bean方法而重新創建對象,Bean是默認單例的

  • @EnableConfigurationProperties(ServerProperties.class)

    啟用可以在配置類設置的屬性 對應的類

  • @ConditionalXXX 根據當前不同的條件判斷,決定這個配置類是否生效

    @Conditional派生注解(Spring注解版原生的@Conditional作用)
    作用:必須是@Conditional指定的條件成立,才給容器中添加組件,配置配里面的所有內容才生效;


以前寫過一篇@Condition的,請移步 Spring - @Conditional全解

@Conditional擴展注解作用(判斷是否滿足當前指定條件)
@ConditionalOnJava系統的java版本是否符合要求
@ConditionalOnBean容器中存在指定Bean;
@ConditionalOnMissingBean容器中不存在指定Bean;
@ConditionalOnExpression滿足SpEL表達式指定
@ConditionalOnClass系統中有指定的類
@ConditionalOnMissingClass系統中沒有指定的類
@ConditionalOnSingleCandidate容器中只有一個指定的Bean,或者這個Bean是首選Bean
@ConditionalOnProperty系統中指定的屬性是否有指定的值
@ConditionalOnResource類路徑下是否存在指定資源文件
@ConditionalOnWebApplication當前是web環境
@ConditionalOnNotWebApplication當前不是web環境
@ConditionalOnJndiJNDI存在指定項

什么情況下,Spring Boot 會自動裝配 HttpEncodingAutoConfiguration

我們來分析下 在滿足什么情況下,Spring Boot 會自動裝配 HttpEncodingAutoConfiguration

主要都在這里了

@Configuration(proxyBeanMethods = false) @EnableConfigurationProperties(ServerProperties.class) @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) @ConditionalOnClass(CharacterEncodingFilter.class) @ConditionalOnProperty(prefix = "server.servlet.encoding", value = "enabled", matchIfMissing = true)
  • @Configuration:表示這是一個配置類,以前編寫的配置文件一樣,也可以給容器中添加組件

  • @ConditionalOnWebApplication:Spring底層@Conditional注解(Spring注解版),根據不同的條件,如果滿足指定的條件,整個配置類里面的配置就會生效; 判斷當前應用是否是web應用,如果是,當前配置類生效

  • @ConditionalOnClass:判斷當前項目有沒有這個類CharacterEncodingFilter;SpringMVC中進行亂碼解決的過濾器

  • @ConditionalOnProperty:判斷配置文件中是否存在某個配置 spring.http.encoding.enabled;如果不存在,判斷也是成立的 . 即使我們配置文件中不配置server.servlet.encoding.enabled=true,也是默認生效的

  • @EnableConfigurationProperties({ServerProperties.class}):將配置文件中對應的值和 ServerProperties綁定起來;并把 ServerProperties加入到 IOC 容器中并注冊. ConfigurationPropertiesBindingPostProcessor用于將@ConfigurationProperties的類和配置進行綁定


@EnableConfigurationProperties & ServerProperties

ServerProperties通過 @ConfigurationProperties 注解將配置文件與自身屬性綁定。

@ConfigurationProperties注解的作用就是把全局配置文件中的值綁定到實體類JavaBean上面(將配置文件中的值與ServerProperites綁定起來),而@EnableConfigurationProperties主要是把以綁定值JavaBean加入到spring容器中。

舉個例子: 我們在application.properties 聲明spring.application.name 是通過@ConfigurationProperties注解,綁定到對應的XxxxProperties配置實體類上,然后再通過@EnableConfigurationProperties注解導入到Spring容器中.


是否生效演示

我們知道了 Web環境 會生效

非web環境,我們搞一把


not match


加入

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

以debug=true的形式啟動

還記得另外一個屬性嗎?

@ConditionalOnProperty(prefix = "server.servlet.encoding", value = "enabled", matchIfMissing = true)

我們設置成 false試試

重啟 沒有自動裝配,原因也在下方體現了


原理流程圖

總結

以上是生活随笔為你收集整理的Spring Boot - 自动配置实例解读的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。