ConfigurationProperties的宽松绑定

        在Spring Boot中,我们经常需要从配置文件中读取属性,并将它们注入到Java类中。有两种常见的方式可以实现这个目的:使用@ConfigurationProperties注解和@Value注解。这篇博客将深入比较这两种方式的特性和用法。

1. @ConfigurationProperties

   @ConfigurationProperties注解提供了一种批量注入配置文件属性的方式。通过它,我们可以将配置文件中的属性值映射到Java类的字段上。它支持松散绑定,允许使用不同的命名规范。

1.1 命名规范
  • 仅能使用纯小写字母、数字以及中划线作为合法字符。
1.2 优势
  • 批量注入:可以一次性地将多个属性值注入到同一个Java类中。
  • 松散绑定:支持不同命名规范,提供更灵活的配置项。
1.3 功能
  • 松散绑定:支持
  • SpEL:不支持
  • JSR303:支持
  • 复杂类型封装:支持

2. @Value

@Value注解是另一种从配置文件中读取属性的方式,但它是基于单个属性的注入。每个属性都需要使用@Value注解单独注入。

2.1 命名规范
  • 无特殊规范,可以直接使用属性名。
2.2 劣势
  • 单个注入:每个属性都需要单独指定。
  • 不支持松散绑定:属性名必须与配置文件中的完全一致。
2.3 功能
  • 松散绑定:不支持
  • SpEL:支持
  • JSR303:不支持
  • 复杂类型封装:不支持

3. 比较总结

通过对比,我们可以得出以下结论:

  • @ConfigurationProperties适合批量注入配置文件属性,支持松散绑定和JSR303校验,适用于复杂的配置项。
  • @Value适合单个属性的注入,支持SpEL表达式,适用于简单的配置项。

使用的部分截图如下:

@ConfigurationProperties绑定属性支持属性名宽松绑定

 

下面几种模式都是可以被上面识别

绑定前缀名命名规范:仅能使用纯小写字母,数字。中划线作为合法的字符(其他的就会有如下报错)

Prefix must be in canonical form  翻译后如下:

修改后 

OK

与@Value区别:

@ConfigurationProperties

@Value

功能

批量注入配置文件中的属性

一个个指定

松散绑定

支持

不支持

SpEL

不支持

支持

JSR303

支持

不支持

复杂类型封装

支持

不支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五敷有你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值