SpringBoot--properties配置、@Valuehe @ConfigurationProperties对比、配置文件注入值数据校验

本文深入解析Spring框架中@ConfigurationProperties和@Value注解的功能差异,包括松散绑定、数据校验、SpEL支持及复杂类型封装特性。通过实例展示如何在JavaBean中注入properties配置文件的值,并探讨不同注入方式的选择策略。
摘要由CSDN通过智能技术生成
properties配置

示例:

#idea的properties配置文件默认为utf-8编码
person.last-name=张三
person.age=18
person.birth=2017/12/15
person.boss=false
person.map.k1=v1
person.map.k2=14
person.lists=a,b,c
person.dog.name=dog
person.dog.age=15

注入方式:

  1. 使用@ConfigurationProperties注解可以获取到配置信息。
  2. 使用@Value注解手动注入
@Component
//@ConfigurationProperties(prefix = "person")

public class Person {
    @Value("${person.last-name}")//可以使用${}获取配置信息
    private String lastName;
    @Value("#{11*2}")//可以使用Spring的#{}表达式
    private Integer age;
    @Value("true")//可以使用字面量
    private Boolean boss;
    private Date birth;

    private Map<String,Object> map;
    private List<Object> lists;
    private Dog dog;
	...
}
@Valuehe @ConfigurationProperties对比
Feature@ConfigurationProperties@Value
Relaxed binding(松散绑定)YesNo
Meta-data support(数据校验)YesNo
SpELNoYes
复杂类型封装YesNo
属性名匹配规则(Relaxed bingding)
  • person.firstName:使用标准方式
  • person.first-name:大写用-
  • person.first_name:大写用_
  • PERSON_FIRST_NAME:推荐使用

配置文件yml还是properties他们都能获取到值;

如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;

如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;

配置文件注入值数据校验
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {

    /**
     * <bean class="Person">
     *      <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>
     * <bean/>
     */

   //lastName必须是邮箱格式,不是 则报错
    @Email
    //@Value("${person.last-name}")
    private String lastName;
    //@Value("#{11*2}")
    private Integer age;
    //@Value("true")
    private Boolean boss;

    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值