1. 程式人生 > 程式設計 >SpringBoot使用@ConstructorBinding註解進行配置屬性繫結

SpringBoot使用@ConstructorBinding註解進行配置屬性繫結

SpringBoot2.2版本發行後一些新的功能也漸漸的浮出了水面,在之前版本SpringBoot的配置檔案與類之間的屬性繫結(@ConfigurationProperties)是通過Setter方法來進行繫結對應的配置值,而從2.2版本開始支援了建構函式的方式進行繫結。

部落格原文:blog.yuqiyu.com/springboot-…

@ConstructorBinding註解

這個註解是SpringBoot在2.2發行版中新增的,新增該註解的屬性配置類不再需要新增Setter方法,不過需要新增建構函式,根據建構函式進行例項化屬性配置類。

建立專案

使用IDEA建立一個SpringBoot

專案,在pom.xml中新增依賴如下所示:

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

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
      <exclusion>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
      </exclusion>
    </exclusions>
  </dependency>
</dependencies>複製程式碼

配置資訊

本章主要是講解怎麼把application.yml或者application.properties配置檔案的內容自動對映繫結到配置類的對應屬性欄位上,所以我們需要在application.yml檔案中新增部分我們自定義的配置內容,如下所示:

# 自定義配置
minbox:
  config:
    author: 恆宇少年 - 於起宇
    blog-address: http://blog.yuqiyu.com複製程式碼

配置類

我們對應application.yml的配置資訊,對應編寫一個名為MinBoxConfig的對映配置類,如下所示:


/**
 * 配置類
 *
 * @author 恆宇少年
 */
@ConfigurationProperties(prefix = PREFIX)
@ConstructorBinding
public class MinBoxConfig {
    /**
     * 對映繫結 "minbox.config"字首的配置資訊
     */
    public static final String PREFIX = "minbox.config";
    /**
     * 配置資訊:作者
     */
    private String author;
    /**
     * 配置資訊:部落格地址
     */
    private String blogAddress;

    public MinBoxConfig(String author,String blogAddress) {
        this.author = author;
        this.blogAddress = blogAddress;
    }

    public String getAuthor() {
        return author;
    }

    public String getBlogAddress() {
        return blogAddress;
    }
}
複製程式碼

在之前的版本我們都是使用@Configuration@ConfigurationProperties這兩個註解來進行配置對映,從SpringBoot2.2.1.RELEASE版本開始我們不再需要新增@Configuration,只要通過@ConfigurationPropertiesScan結合@ConfigurationProperties搭配使用即可,會自動掃描指定package下的屬性配置類進行繫結。

在屬性配置類上新增@ConstructorBinding註解,即可實現建構函式的方式進行對應欄位設定值,我們只需要把繫結賦值的引數通過建構函式的方式定義。

在上面程式碼中MinBoxConfig配置類建構函式內有兩個引數:authorblogAddress,所以在例項化MinBoxConfig物件時,只會從application.yml對應獲取到這兩個配置內容進行賦值。

執行測試

使用IDEA建立專案時會自動在src/test/java/{packages}建立@SpringBootTest註解的測試類,我們通過測試類來驗證配置是否已經賦值給了配置類,如下所示:

@SpringBootTest
class SpringbootConstructorBindingPropertiesApplicationTests {

    @Autowired
    private MinBoxConfig minBoxConfig;

    @Test
    void printConfig() {
        System.out.println("作者名稱:" + minBoxConfig.getAuthor());
        System.out.println("作者部落格地址:" + minBoxConfig.getBlogAddress());
    }

}複製程式碼

執行printConfig()方法後輸出內容如下所示:

作者名稱:恆宇少年 - 於起宇
作者部落格地址:http://blog.yuqiyu.com複製程式碼

敲黑板,劃重點

@ConfigurationProperties這個註解可以讓我們的配置檔案的內容直接對映到Java配置類,而且通過掃描的方式自動註冊到IOC,極大地方便了我們在專案中使用配置內容。

程式碼示例

如果您喜歡本篇文章請為原始碼倉庫點個Star,謝謝!!!本篇文章示例原始碼可以通過以下途徑獲取,目錄為SpringBoot2.x/springboot-constructor-binding-properties

作者個人 部落格

使用開源框架 ApiBoot 助你成為Api介面服務架構師