spring中的@ConfigurationProperties注解詳解


一、核心功能與作用

@ConfigurationProperties 是Spring Boot中用于將外部配置(如application.propertiesapplication.yml中的屬性)綁定到Java對象的核心注解。其核心功能包括:

    1. 配置集中管理:將分散的配置屬性按前綴綁定到Java類的字段上,支持類型安全訪問。
    1. 多格式支持:兼容propertiesyml格式的配置文件,支持復雜數據結構(如List、Map)的綁定。
    1. 動態配置:通過@RefreshScope(結合Spring Cloud)實現配置熱更新。
    1. 松散綁定:支持多種命名風格(如駝峰、下劃線、連字符)的自動轉換,例如send-email-on-errors映射到字段sendEmailOnErrors
    1. 數據校驗:結合JSR-303注解(如@Validated@NotNull)實現配置值的合法性校驗。

二、使用方式與場景

  1. 基礎用法:綁定配置到組件類
  • 步驟:

    • 定義配置類,添加@Component@ConfigurationProperties(prefix = "前綴")注解。

    • 提供字段的getter/setter方法(或使用Lombok的@Data)。

  • 示例:

    @Component
    @ConfigurationProperties(prefix = "database")
    public class DatabaseConfig {private String url;private String username;private String password;// getter/setter省略
    }
    
    # application.properties
    database.url=jdbc:mysql://localhost:3306/mydb
    database.username=root
    database.password=secret
    
  1. 通過@Bean方法綁定第三方組件
  • 場景:當需要為第三方庫(如Druid數據源)注入配置時,無法直接修改其源碼。

  • 示例:

    @Configuration
    public class DataSourceConfig {@Bean@ConfigurationProperties(prefix = "spring.datasource.druid")public DataSource dataSource() {return new DruidDataSource();}
    }
    
  1. 使用@EnableConfigurationProperties顯式注冊
  • 場景:非組件類(如無法添加@Component的類)的配置綁定。

  • 示例:

    @Configuration
    @EnableConfigurationProperties(DatabaseConfig.class)
    public class AppConfig {}
    

三、底層實現原理

  1. 后置處理器機制
    Spring Boot通過ConfigurationPropertiesBindingPostProcessor后置處理器,在容器啟動時掃描所有@ConfigurationProperties注解的類,將配置屬性綁定到其字段。

  2. 自動配置入口
    @EnableAutoConfiguration會觸發ConfigurationPropertiesAutoConfiguration自動配置類,通過@EnableConfigurationProperties導入配置綁定邏輯。

  3. 屬性解析優先級
    配置屬性按以下優先級生效:

    • 命令行參數 > 測試環境@TestPropertySource > 配置文件(如application.yml)> 默認值。

四、高級特性與最佳實踐

  1. 松散綁定(Relaxed Binding)
    ? 規則:支持屬性名與字段名的多種映射方式(如user-nameuserNameUSER_NAMEuserName)。

? 限制:prefix必須全小寫(如prefix = "myapp"對應配置myapp.title)。

  1. 復雜數據結構綁定
  • List/Map類型:

    app.admin-emails[0]=jim@example.com
    app.admin-emails[1]=gina@example.com
    
    @ConfigurationProperties(prefix = "app")
    public class AppConfig {private List<String> adminEmails;private Map<String, String> screenProperties;
    }
    
  1. 數據校驗
  • 示例:結合@Validated實現格式校驗:

    @Validated
    @ConfigurationProperties(prefix = "user")
    public class UserConfig {@Emailprivate String email;@Min(18)private int age;
    }
    
  1. 動態刷新配置
  • 場景:結合Spring Cloud的@RefreshScope實現配置熱更新:

    @RefreshScope
    @ConfigurationProperties(prefix = "dynamic")
    public class DynamicConfig {}
    

五、注意事項

  1. 組件必須由Spring管理
    配置類需通過@Component@Bean@EnableConfigurationProperties注冊到容器中,否則綁定失敗。

  2. 避免屬性覆蓋沖突
    當多個配置源的屬性名沖突時,需明確優先級(如測試環境覆蓋生產配置)。

  3. IDE提示增強
    添加spring-boot-configuration-processor依賴,可在IDE中自動提示配置屬性。


總結

@ConfigurationProperties是Spring Boot實現類型安全配置管理的核心工具,通過靈活的綁定規則和擴展機制,顯著提升了配置的可維護性和可讀性。開發者應結合松散綁定、數據校驗等特性優化配置設計,同時注意配置類的注冊方式和屬性優先級,以應對復雜的企業級應用場景。


spring中的@Configuration注解詳解

spring中的@PostConstruct注解詳解

spring1.x詳解介紹

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79829.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79829.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79829.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C/C++】函數模板

&#x1f3af; C 學習筆記&#xff1a;函數模板&#xff08;Function Template&#xff09; 本文是面向 C 初學者的函數模板學習筆記&#xff0c;內容包括基本概念、定義與使用、實例化過程、注意事項等&#xff0c;附帶示例代碼&#xff0c;便于理解與復現。 &#x1f4cc; 一…

電子病歷高質量語料庫構建方法與架構項目(智能數據目錄篇)

電子病歷高質量語料庫的構建是醫療人工智能發展的基礎性工作,而智能數據目錄作為數據治理的核心組件,能夠有效管理這些語料資源。本文將系統闡述電子病歷高質量語料庫的構建方法與架構,特別聚焦于智能數據目錄的設計與實現,包括數據目錄的功能定位、元數據管理、構建步驟以…

前端懶加載(Lazy Loading)實戰指南

&#x1f680; 前端懶加載&#xff08;Lazy Loading&#xff09;實戰指南 懶加載是現代 Web 性能優化的“常規操作”。它的目標簡單直接&#xff1a;讓用戶只加載“當下真正需要的資源”。從靜態資源、組件、模塊到數據&#xff0c;每一層都可以使用懶加載技術&#xff0c;構建…

在 Ubuntu 系統中,查看已安裝程序的方法

在 Ubuntu 系統中&#xff0c;查看已安裝程序的方法取決于軟件的安裝方式&#xff08;如通過 apt、snap、flatpak 或手動安裝&#xff09;。以下是幾種常見方法&#xff1a; 通過 apt 包管理器安裝的軟件 適用于通過 apt 或 dpkg 安裝的 .deb 包。 列出所有已安裝的軟件包&…

性能優化實踐:性能監控體系

性能優化實踐&#xff1a;性能監控體系 在Flutter應用開發中&#xff0c;建立一個完善的性能監控體系對于保證應用質量和用戶體驗至關重要。本文將從實戰角度深入講解如何搭建Flutter應用的性能監控體系&#xff0c;包括監控指標的設計、數據采集實現、分析平臺搭建等內容。 …

kotlin 02flow-sharedFlow 完整教程

一 sharedFlow是什么 SharedFlow 是 Kotlin 協程中 Flow 的一種 熱流&#xff08;Hot Flow&#xff09;&#xff0c;用于在多個訂閱者之間 共享事件或數據流。它適合處理 一次性事件&#xff08;如導航、彈窗、Toast、刷新通知等&#xff09;&#xff0c;而不是持續狀態。 ? …

模擬開發授權平臺

這次只是實現應用的curd和公私鑰的校驗以及第三方的通知dmeo項目&#xff0c;大家可以拓開視野來編寫 進入主題 項目鏈接&#xff1a;桌角的眼鏡/develop_auth_platform 直接下拉并運行就行 回調應用代碼在test包中 回調應用測試代碼 package mainimport ("encoding/…

STM32 USART串口

一、通信接口 二、串口通信 串口是一種應用十分廣泛的通訊接口&#xff0c;串口成本低、容易使用、通信線路簡單&#xff0c;可實現兩個設備的互相通信單片機的串口可以使單片機與單片機、單片機與電腦、單片機與各式各樣的模塊互相通信&#xff0c;極大地擴展了單片機的應用…

uniapp開發06-視頻組件video的使用注意事項

uniapp開發-視頻組件video的使用注意事項&#xff01;實際項目開發中&#xff0c;經常會遇到視頻播放的業務需求。下面簡單講解一下&#xff0c;uniapp官方提供的視頻播放組件video的常見參數和實際效果。 1&#xff1a;先看代碼&#xff1a; <!--視頻組件的使用展示-->…

【爬蟲】微博熱搜機

第一個下面一點&#xff1a; js代碼&#xff1a; const n require("crypto-js");let s n.SHA1(n.enc.Utf8.parse("tSdGtmwh49BcR1irt18mxG41dGsBuGKS")) , a n.enc.Hex.parse(s.toString(n.enc.Hex).substr(0, 32));function h(t) {let e (i t Stri…

軟考 系統架構設計師系列知識點之雜項集萃(51)

接前一篇文章&#xff1a;軟考 系統架構設計師系列知識點之雜項集萃&#xff08;50&#xff09; 第80題 設三個煤場A1、A2、A3分別能供應煤7、12、11萬噸&#xff0c;三個工廠B1、B2、B3分別需要10、10、10萬噸&#xff0c;從各煤場到各工廠運煤的單價&#xff08;百元/噸&…

npm,yarn,pnpm,cnpm,nvm,npx包管理器常用命令

前端比較主流的包管理器主要有三個npm&#xff0c;yarn&#xff0c;pnpm 多層級依賴&#xff0c;通常發生在依賴之間存在復雜的版本要求時 包 A 依賴于包 B1.0.0 包 B 依賴于包 C2.0.0 另一個包 D 也依賴于 C3.0.0 一、NPM (Node Package Manager) https://www.npmjs.cn/…

科普簡潔版:同態加密——密碼學的未來瑰寶

文章目錄 一、同態加密的基本概念1.1 什么是同態加密1.2 同態加密的數學本質1.3 同態加密的類型 二、主要同態加密方案詳解2.1 ElGamal加密2.2 Paillier加密2.3 Gentry的完全同態加密方案2.4 BGV方案2.5 BFV方案2.6 CKKS方案 三、同態加密的關鍵技術3.1 噪聲管理技術3.2 多項式…

力扣第448場周賽

賽時成績如下: 這應該是我力扣周賽的最好成績了(雖然還是三題) 1. 兩個數字的最大乘積 給定一個正整數 n。 返回 任意兩位數字 相乘所得的 最大 乘積。 注意&#xff1a;如果某個數字在 n 中出現多次&#xff0c;你可以多次使用該數字。 示例 1&#xff1a; 輸入&#xff1…

(一)Modular Monolith Architecture(項目結構/.net項目初始化/垂直切片架構)

文章目錄 項目地址一、項目結構1.1 Modules1. Events 模塊2. Users 模塊3. Ticketing 模塊4. Attendance 模塊1.2 數據庫模塊1.3 模塊架構選擇1. 全是Clean Architecture2. 分別使用不同的架構二、初始化項目2.1 本地創建項目結構1. 創建空的solution2. 添加基礎配置3. 創建git…

Java常用組件之Redis經典面試題(一)

大家好&#xff0c;今天為大家帶來Java項目中&#xff0c;幾乎必不可少的組件之一-Redis的一些常見面試題&#xff0c;幫忙近期需要面試的朋友們來一個理論基礎突擊&#xff01; 一、數據類型 1.Redis的常用數據類型有哪些 ? 難易程度&#xff1a;☆☆☆ 出現頻率&#xff1a;…

2025.5.4總結

今天去光谷步行街逛了一下&#xff0c;感覺熟悉又陌生&#xff0c;說熟悉是因為初二的時候來過武漢光谷&#xff0c;盡管過去了8年時間&#xff0c;但絲毫不影響標志性建筑的存在&#xff0c;也陌生是商場的建筑風格真實氣派&#xff0c;感覺進入了一座城堡&#xff0c;在里面都…

神經網絡在專家系統中的應用:從符號邏輯到連接主義的融合創新

自人工智能作為一個學科面世以來&#xff0c;關于它的研究途徑就存在兩種不同的觀點。一種觀點主張對人腦的結構及機理開展研究&#xff0c;并通過大規模集成簡單信息處理單元來模擬人腦對信息的處理&#xff0c;神經網絡是這一觀點的代表。關于這方面的研究一般被稱為連接機制…

Doo全自動手機殼定制系統

Doo全自動手機殼定制系統 項目概述 Doo全自動手機殼定制系統是一個完整的手機殼定制解決方案&#xff0c;支持多端應用&#xff0c;包括服務端、客戶端、管理后臺等多個組件。系統采用現代化的技術棧&#xff0c;提供完整的手機殼定制、訂單管理、用戶管理等功能。 目錄結構…

PageOffice在線打開word文件,并實現切換文件

本示例關鍵代碼的編寫位置&#xff0c;請參考“PageOffice 開發者中心-快速起步–開始 - 快速上手”里您所使用的開發語言框架的最簡集成代碼 注意 本文中展示的代碼均為關鍵代碼&#xff0c;復制粘貼到您的項目中&#xff0c;按照實際的情況&#xff0c;例如文檔路徑&#xff…