SpringBoot使用@ConstructorBinding注解進(jìn)行配置屬性綁定

SpringBoot2.2版本發(fā)行后一些新的功能也漸漸的浮出了水面,在之前版本SpringBoot的配置文件與類之間的屬性綁定(@ConfigurationProperties)是通過Setter方法來進(jìn)行綁定對(duì)應(yīng)的配置值,而從2.2版本開始支持了構(gòu)造函數(shù)的方式進(jìn)行綁定。

免費(fèi)教程專題

恒宇少年在博客整理三套免費(fèi)學(xué)習(xí)教程專題,由于文章偏多特意添加了閱讀指南,新文章以及之前的文章都會(huì)在專題內(nèi)陸續(xù)填充,希望可以幫助大家解惑更多知識(shí)點(diǎn)。

博客原文:http://blog.yuqiyu.com/springboot-constructor-binding-properties.html

@ConstructorBinding注解

這個(gè)注解是SpringBoot在2.2發(fā)行版中添加的,添加該注解的屬性配置類不再需要添加Setter方法,不過需要添加構(gòu)造函數(shù),根據(jù)構(gòu)造函數(shù)進(jìn)行實(shí)例化屬性配置類。

創(chuàng)建項(xiàng)目

使用IDEA創(chuàng)建一個(gè)SpringBoot項(xiàng)目,在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配置文件的內(nèi)容自動(dòng)映射綁定到配置類的對(duì)應(yīng)屬性字段上,所以我們需要在application.yml文件中添加部分我們自定義的配置內(nèi)容,如下所示:

# 自定義配置
minbox:
  config:
    author: 恒宇少年 - 于起宇
    blog-address: http://blog.yuqiyu.com

配置類

我們對(duì)應(yīng)application.yml的配置信息,對(duì)應(yīng)編寫一個(gè)名為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這兩個(gè)注解來進(jìn)行配置映射,從SpringBoot2.2.1.RELEASE版本開始我們不再需要添加@Configuration,只要通過@ConfigurationPropertiesScan結(jié)合@ConfigurationProperties搭配使用即可,會(huì)自動(dòng)掃描指定package下的屬性配置類進(jìn)行綁定。

在屬性配置類上添加@ConstructorBinding注解,即可實(shí)現(xiàn)構(gòu)造函數(shù)的方式進(jìn)行對(duì)應(yīng)字段設(shè)置值,我們只需要把綁定賦值的參數(shù)通過構(gòu)造函數(shù)的方式定義。

在上面代碼中MinBoxConfig配置類構(gòu)造函數(shù)內(nèi)有兩個(gè)參數(shù):author、blogAddress,所以在實(shí)例化MinBoxConfig對(duì)象時(shí),只會(huì)從application.yml對(duì)應(yīng)獲取到這兩個(gè)配置內(nèi)容進(jìn)行賦值。

運(yùn)行測(cè)試

使用IDEA創(chuàng)建項(xiàng)目時(shí)會(huì)自動(dòng)在src/test/java/{packages}創(chuàng)建@SpringBootTest注解的測(cè)試類,我們通過測(cè)試類來驗(yàn)證配置是否已經(jīng)賦值給了配置類,如下所示:

@SpringBootTest
class SpringbootConstructorBindingPropertiesApplicationTests {

    @Autowired
    private MinBoxConfig minBoxConfig;

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

}

運(yùn)行printConfig()方法后輸出內(nèi)容如下所示:

作者名稱:恒宇少年 - 于起宇
作者博客地址:http://blog.yuqiyu.com

敲黑板,劃重點(diǎn)

@ConfigurationProperties這個(gè)注解可以讓我們的配置文件的內(nèi)容直接映射到Java配置類,而且通過掃描的方式自動(dòng)注冊(cè)到IOC,極大地方便了我們?cè)陧?xiàng)目中使用配置內(nèi)容。

代碼示例

如果您喜歡本篇文章請(qǐng)為源碼倉(cāng)庫(kù)點(diǎn)個(gè)Star,謝謝?。。?br> 本篇文章示例源碼可以通過以下途徑獲取,目錄為SpringBoot2.x/springboot-constructor-binding-properties

作者個(gè)人 博客
使用開源框架 ApiBoot 助你成為Api接口服務(wù)架構(gòu)師

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容