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
配置類建構函式內有兩個引數:author
、blogAddress
,所以在例項化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
:
- Gitee:gitee.com/hengboy/spr…
作者個人 部落格
使用開源框架 ApiBoot 助你成為Api介面服務架構師