【SpringBoot】的遗漏部分(1):获取配置文件的值@ConfigurationProperties注解和@Value注解

准备工作

配置文件内容

#father
father:
  name: 啦啦啦啦
  age:  11
  isBoss: false
  map:
    key1: 1
    key2: 2
  list:
    - 1
    - 2
    - 3

测试类

@SpringBootTest
class ReviewApplicationTests {

  @Autowired
  Father father;
  @Test
  void contextLoads() {
    System.out.println(father);
  }

}

@ConfigurationProperties注解

ps:使用注解idea报错可以看这里
实体类

/**
 * @Author: YuXinXin
 * @Description: ConfigurationProperties将配置文件中的对应属性值映射到这个组件类中进行11绑定
 * prefix = "father":配置文件中的前缀为father
 * @Date:Created in 13:20 2020/8/1
 **/
@Data
@Component
@ConfigurationProperties(prefix = "father")
public class Father {
  private String name;
  private Integer age;
  private Boolean isBoss;
  private Map map;
  private List list;
}

测试结果
在这里插入图片描述

@Value注解

实体类

@Data
@Component
public class Father {
  @Value("${father.name}")
  private String name;
  @Value("#{60}")
  private Integer age;
  @Value("true")
  private Boolean isBoss;
  private Map map;
  private List list;
}

测试结果
在这里插入图片描述

两者的对比

@ConfigurationProperties@Value
实现功能批量注入配置文件的属性值一个一个指定
松散语法支持不支持
spring表达式不支持支持
复杂类型封装支持不支持
数据校验支持不支持

一些解释

松散语法:@Value 注解要求配置文件属性和实体类属性完全一致,而@ConfigurationProperties允许驼峰下划线和小短线的多种格式转换(如p-name,p_name,pName)
复杂类型封装:@Value仅能实现简单类型的封装,而@ConfigurationProperties可以实现复杂类型的封装,包括list map 和java类等
数据校验 :读取配置文件时候可以使用@Validated注解标注实体类,然后在属性上使用验证注解验证,但是@Value不会去走验证注解

对比结果

若只是在某个业务逻辑中获取配置文件中的某个属性值,则使用@Value;
若专门编写了一个javaBean与配置文件进行映射,则使用@ConfigurationProperties。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值