@Value注解和@ConfigurationProperties,读取配置文件的属性

时间:2025-02-13 11:41:13

目录

@Value注解

1.常量注入

 属性、系统属性、表达式注入@Value(“#{}”)

3.配置文件属性注入@Value(“${}”)

@Value("#{}")和@Value("${XXX}")的区别

@ConfigurationProperties


@Value注解

@Value注解的作用时通过注解将常量、配置文件中的值、其它bean的属性值注入到变量中,作为标量的初始值。

1.常量注入

@Value("#{1}")

private int constant;  //常量 

@Value(“no”)

  Private String no;//注入普通字符串

 @Value(“classpath:com/hry/a/”)

 Private Resource resourceFile //注入文件资源

 @Value(“http://www/”)

 Privatr Resource testUrl; //注入URL资源

 属性、系统属性、表达式注入@Value(“#{}”)

Bean属性注入需要注入者和被注入者属于同一个IOC容器,或者父子IOC容器关系,在同一个作用域内。

@Value(“#{}”)

Private String fromAnotherBean //注入其它Bean属性:注入beanInject对象的属性another,类具体定义见下面

@Value(“#{systemProperties[‘’]}”)

Private String systemProperetiesName; //注入操作系统属性

@Value(“#{T().random()*100.0}”)

Private double randomNumber; //注入表达式结果

//从指定属性源获取属性值(jvm属性)

    @Value("#{systemProperties['']}")

    private String systemPropertiesjson;

 //从指定属性源获取属性值(系统环境属性源)

    @Value("#{systemEnvironment['HOME']}")

    private String systemEnvironmentHOME;

 //从指定属性源获取属性值 默认值

    @Value("#{systemEnvironment['HOME22']?:'default'}")

    private String systemEnvironmentHOMEdefault;

3.配置文件属性注入@Value(“${}”)

@Value(“#{}”)读取配置文件中的值,注入到变量中去。配置文件分为默认配置文件和自定义配置文件

。在spring boot启动时默认加载此文件

自定义属性文件。自定义属性文件通过@PropertySource加载。@PropertySource可以同时加载多个文件,也可以加载单个文件。如果相同第一个属性文件和第二个属性文件存在相同的key,则最后一个属性文件里的key启作用。加载文件的路径也可以配置变量,如下文的${} 此值定义在第一个属性文件

第一个属性文件内容如下:

${}作为第二个属性文件加载路径的变量值

=bookName

= placeholder

       第二个属性文件config_placeholder.properties内容如下:

              = bookNamePlaceholder

       下面通过@Value("${}")语法将属性文件的值注入bean属性值,详细代码见:
       @Component

//引用自定义配置文件

@ProperlySource({“classpath:com/hry/”,

//引用自定义配置文件。${}则是文件中的第二个属性值,会被替换为config_placeholder.properties.

“classpath:com/hty/config_${}.properties” })

Public class ConfigurationFileInjrct{

       @Value(“${}”)

       Private String appName; //这里的值来自, spring boot启动时默认加载此文件

       @Value(“${}”)

       Private String bookName; //注解第一个配置文件的第一个属性

       @Value(“${}”

       private String bookNamePlaceholeder; //注入第二配置的外部文件属性

}

@Value("#{}")和@Value("${XXX}")的区别

  1. @Value(“#{}”) 表示SpEl通表达式常用来获取bean的属性,或者调用bean的某个方法。当然还有可以表示常量
  2. @Value(“${xxxx}”)注解从配置文件读取值的用法

@ConfigurationProperties

ConfigurationProperties其实就类似于使用多个@Value同时绑定,绑定的对象就是DataSource类型的对象,而且是 隐式绑定 的,意味着在配置文件编写的时候需要与对应类的字段名称 相同。

  1. @ConfigurationProperties 和 @value 有着相同的功能,但是 @ConfigurationProperties的写法更为方便
  2. @ConfigurationProperties 的 POJO类的命名比较严格,因为它必须和prefix的后缀名要一致, 不然值会绑定不上, 特殊的后缀名是“driver-class-name”这种带横杠的情况,在POJO里面的命名规则是 下划线转驼峰 就可以绑定成功,所以就是 “driverClassName”。

@Value注解和@ConfigurationProperties,读取配置文件的属性

本人笔记

来源:大部分来源百度本库