@Data與@ConfigurationProperties 簡化配置屬性數據


參考地址:https://www.cnblogs.com/FraserYu/p/11261916.html

 

在編寫項目代碼時,我們要求更靈活的配置,更好的模塊化整合。在 Spring Boot 項目中,為滿足以上要求,我們將大量的參數配置在 application.properties 或 application.yml 文件中,通過 @ConfigurationProperties 注解,我們可以方便的獲取這些參數值

使用 @ConfigurationProperties 配置模塊

假設我們正在搭建一個發送郵件的模塊。在本地測試,我們不想該模塊真的發送郵件,所以我們需要一個參數來「開關」 disable 這個功能。另外,我們希望為這些郵件配置一個默認的主題,這樣,當我們查看郵件收件箱,通過郵件主題可以快速判斷出這是測試郵件

在 application.properties 文件中創建這些參數:

我們可以使用 @Value 注解或着使用 Spring Environment bean 訪問這些屬性,是這種注入配置方式有時顯得很笨重。我們將使用更安全的方式(@ConfigurationProperties)來獲取這些屬性

@ConfigurationProperties 的基本用法非常簡單:我們為每個要捕獲的外部屬性提供一個帶有字段的類。請注意以下幾點:

  • 前綴定義了哪些外部屬性將綁定到類的字段上
  • 根據 Spring Boot 寬松的綁定規則,類的屬性名稱必須與外部屬性的名稱匹配
  • 我們可以簡單地用一個值初始化一個字段來定義一個默認值
  • 類本身可以是包私有的
  • 類的字段必須有公共 setter 方法

Spring 寬松綁定規則 (relaxed binding)

Spring使用一些寬松的綁定屬性規則。因此,以下變體都將綁定到 hostName 屬性上:

如果我們將 MailModuleProperties 類型的 bean 注入到另一個 bean 中,這個 bean 現在可以以類型安全的方式訪問那些外部配置參數的值。

但是,我們仍然需要讓 Spring 知道我們的 @ConfigurationProperties 類存在,以便將其加載到應用程序上下文中( 面試還不知道 BeanFactory 和 ApplicationContext 的區別?)

激活 @ConfigurationProperties

對於 Spring Boot,創建一個 MailModuleProperties 類型的 bean,我們可以通過下面幾種方式將其添加到應用上下文中

首先,我們可以通過添加 @Component 注解讓 Component Scan 掃描到,再配合AutoWaird

我們還可以使用 @EnableConfigurationProperties 注解讓我們的類被 Spring Boot 所知道,在該注解中其實是用了@Import(EnableConfigurationPropertiesImportSelector.class) 實現,大家可以看一下

激活一個 @ConfigurationProperties 類的最佳方式是什么?

所有上述方法都同樣有效。然而,我建議模塊化你的應用程序,並讓每個模塊提供自己的@ConfigurationProperties 類,只提供它需要的屬性,就像我們在上面的代碼中對郵件模塊所做的那樣。這使得在不影響其他模塊的情況下重構一個模塊中的屬性變得容易。

 


免責聲明!

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



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