SpringBoot如何将applicaton.properties中的数据绑定到bean中

 更新时间:2025年05月16日 11:17:05   作者:cg5017  
SpringBoot中我们该如何将applicaton.properties中的数据绑定到bean中呢?在之间我们是可以通过@value注解,在SpringBoot自动启动后,会自动的去相应的路径中去寻找applicaton.properties配置文件,然后将相应的值赋值上,感兴趣的朋友一起看看吧

一、回顾@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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JDK8的lambda方式List转Map的操作方法

    JDK8的lambda方式List转Map的操作方法

    account是一个返回本身的lambda表达式,其实还可以使用Function接口中的一个默认方法代替,使整个方法更简洁优雅,这篇文章主要介绍了JDK8的lambda方式List转Map,需要的朋友可以参考下
    2022-07-07
  • Java多线程案例实战之定时器的实现

    Java多线程案例实战之定时器的实现

    在Java中可以使用多线程和定时器来实现定时任务,下面这篇文章主要给大家介绍了关于Java多线程案例之定时器实现的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • 利用Java Set 去除重复object的方法

    利用Java Set 去除重复object的方法

    下面小编就为大家带来一篇利用Java Set 去除重复object的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Java学习之Lambda表达式的使用详解

    Java学习之Lambda表达式的使用详解

    Lambda表达式是Java SE 8中一个重要的新特性,允许通过表达式来代替功能接口。本文将通过一些简单的示例和大家讲讲Lamda表达式的使用,感兴趣的可以了解一下
    2022-12-12
  • Springboot使用Security实现OAuth2授权验证完整过程

    Springboot使用Security实现OAuth2授权验证完整过程

    安全管理是软件系统必不可少的的功能。根据经典的“墨菲定律”——凡是可能,总会发生。如果系统存在安全隐患,最终必然会出现问题,这篇文章主要介绍了SpringBoot使用Security实现OAuth2授权验证完整过程
    2022-12-12
  • Spring boot多线程配置方法

    Spring boot多线程配置方法

    这篇文章主要为大家详细介绍了Spring boot多线程配置方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • java打包成jar并执行jar包中指定的main方法

    java打包成jar并执行jar包中指定的main方法

    这篇文章主要介绍了如何将java打包成可执行的jar,并执行jar包中指定的main方法的相关资料,文中给出了详细的示例代码,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • SpringBoot实现多文件上传的详细示例代码

    SpringBoot实现多文件上传的详细示例代码

    文件上传中并没有什么太多的知识点,下面这篇文章主要给大家介绍了关于SpringBoot实现多文件上传的详细示例,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • Eclipse代码格式化设置简单介绍

    Eclipse代码格式化设置简单介绍

    这篇文章主要介绍了Eclipse代码格式化设置简单介绍,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • idea 与 maven 使用过程中遇到的问题及解决方案

    idea 与 maven 使用过程中遇到的问题及解决方案

    最近将IDEA 升级到 IntelliJ IDEA 2021.3.2,在将maven项目导入IDEA后,maven build时报异常,这个问题是IntelliJ IDEA 2021.3.2 不兼容导致的,下面小编给大家带来了idea 与 maven 使用过程中遇到的问题及解决方案,感兴趣的朋友一起看看吧
    2022-05-05

最新评论