SpringBoot如何将applicaton.properties中的数据绑定到bean中
作者:cg5017
一、回顾@value注解
SpringBoot中我们该如何将applicaton.properties中的数据绑定到bean中呢?在之间我们是可以通过@value注解,在SpringBoot自动启动后,会自动的去相应的路径中去寻找applicaton.properties配置文件,然后将相应的值赋值上。回顾如下:
spring.application.name=properties-location myapp.name=classpath:/config
//纳入IoC容器管理
@Component
public class appConfig {
@Value("${myapp.name}")
private String appPath;
public void printInfo(){
System.out.println("App Path: " + appPath);
}
}如上的方式就可以很好的将配置文件中的信息注入到bean对象中,但是一但配置文件中的要注入bean对象的信息过多的话,那我们就需要写非常多个@value的注解,这样就会非常的麻烦。
二、将配置绑定到简单bean
使用注解@ConfigurationProperties(prefix="myapp")就可以把后面都依次注入,示例如下。
applicaton.properties中的配置内容如下:
spring.application.name=demo4 myapp.configName=test myapp.configId=1234 myapp.configValue=value myapp.configKey=1234
想将applicaton.properties中的配置内容赋值到Cogfig这个bean对象中。通过@ConfigurationProperties(prefix="myapp")来实现,且需要注意的是,要写上每个要被赋值属性的setter方法,因为其在被赋值的时候是通过setter方法进行赋值的。同时需要注意属性名要和applicaton.properties中的配置一致。
package com.example.demo4;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "myapp")
public class Config {
private String configName;
private String configId;
private String configValue;
private String configKey;
public void setConfigName(String configName) {
this.configName = configName;
}
public void setConfigId(String configId) {
this.configId = configId;
}
public void setConfigValue(String configValue) {
this.configValue = configValue;
}
public void setConfigKey(String configKey) {
this.configKey = configKey;
}
@Override
public String toString() {
return "Config{" +
"configName='" + configName + '\'' +
", configId='" + configId + '\'' +
", configValue='" + configValue + '\'' +
", configKey='" + configKey + '\'' +
'}';
}
}测试结果如下:
package com.example.demo4;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Demo4ApplicationTests {
@Autowired
Config config;
@Test
void test0() {
System.out.println(config.toString());
}
}
输出:Config{configName='test', configId='1234', configValue='value', configKey='1234'}三、将配置绑定到嵌套bean
就是其实有时候绑定的bean并不是单一的,是复杂的。
private String configName; private String configId; private String configValue; private String configKey; private ConfigLocation configLocation;
例如在其中有些bean对象中,其属性可能就不是单一的属性,也可能如private ConfigLocation configLocation;一样,本身也是一个对象,那么像这种嵌套的bean对象又如何注入呢?其实方式是一样的, 也是通过注解@ConfigurationProperties来实现配置到bean的注入。
其ConfigLocation如下。
package com.example.demo4;
public class ConfigLocation {
private String configCountry;
private String configState;
public void setConfigCountry(String configCountry) {
this.configCountry = configCountry;
}
public void setConfigState(String configState) {
this.configState = configState;
}
@Override
public String toString() {
return "ConfigLocation{" +
"configCountry='" + configCountry + '\'' +
", configState='" + configState + '\'' +
'}';
}
}只需要其applicaton.properties的格式改一下就可以实现。
spring.application.name=demo4 myapp.configName=test myapp.configId=1234 myapp.configValue=value myapp.configKey=1234 myapp.configLocation.configCountry=china myapp.configLocation.configState=LiaoNing
测试结果如下:

也是绑定成功了。
四、@EnableConfigurationProperties
@EnableConfigurationProperties的使用方法是在其主入口类上添加该注解,并将启动的配置信息绑定到Config的bean对象上去。
package com.example.demo4;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@SpringBootApplication
@EnableConfigurationProperties(Config.class)
public class Demo4Application {
public static void main(String[] args) {
SpringApplication.run(Demo4Application.class, args);
}
}同时Config这个bean对象上不用在使用@Component注解了。

测试:

通过测试,并输出结果正确。
到此这篇关于SpringBoot中配置绑定到bean中的文章就介绍到这了,更多相关SpringBoot配置绑定bean内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
