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: