SpringBoot @Value与@ConfigurationProperties二者有哪些区别

 更新时间:2022年10月26日 14:20:05   作者:沫洺  
这篇文章主要介绍了SpringBoot @Value与@ConfigurationProperties二者的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

@Value 和 @ConfigurationProperties 注解都能读取配置文件中的属性值并绑定到 JavaBean 中,但两者存在以下不同。

区别@ConfigurationProperties@Value
使用位置不同标注在 JavaBean 的类名上标注在 JavaBean 的属性上
功能不同用于批量绑定配置文件中的配置单值绑定
松散绑定(松散语法)支持部分支持
Spel不支持支持
复杂类型封装支持支持,比较繁琐
JSR303数据校验支持不支持
应用场景不同通过JavaBean获取整个配置文件单个属性值

说明

使用位置不同

  • @ConfigurationProperties:标注在 JavaBean 的类名上;
  • @Value:标注在 JavaBean 的属性上。
@Component
@Data
@ConfigurationProperties(prefix = "person")
@PropertySource("classpath:person.properties")
public class Person {
    private String firstName;
}
@Component
@Data
@PropertySource("classpath:user.properties")
public class User {
    @Value("${user.username}")
    private String username;
}

功能不同

  • @ConfigurationProperties:用于批量绑定配置文件中的配置;
  • @Value:只能一个一个的指定需要绑定的配置。

松散绑定支持不同

@ConfigurationProperties:支持松散绑定(松散语法),例如实体类 Person 中有一个属性为 firstName,那么配置文件中的属性名支持以下写法:

  • person.firstName
  • person.first-name
  • person.first_name
  • PERSON.FIRST_NAME

@Vaule:不支持松散绑定。

SpEL 支持不同

SpEL表达式:#{obj}

  • @ConfigurationProperties:不支持 SpEL 表达式;
  • @Value:支持 SpEL 表达式。
@Value("#{${girl.hobbyMap}}")
private Map<String,Object> hobbyMap;

复杂类型封装

  • @ConfigurationProperties:支持所有类型数据的封装,例如 Map、List、Set、以及对象等;
  • @Value:支持基本数据类型的封装,例如字符串、布尔值、整数等类型, 对集合Map list set配置有要求

属性校验

  • @Value不支持属性校验
  • @ConfigurationProperties 支持属性校验
@Configuration
@ConfigurationProperties(prefix = "boy")
@Data
@PropertySource("classpath:boy.properties")
@Validated
public class Boy {
    @NotNull//不为空
    private String name;
    @Min(20)//不小于20
    private int age;
}

应用场景不同

@Value 和 @ConfigurationProperties 两个注解之间,并没有明显的优劣之分,它们只是适合的应用场景不同而已。

  • 若只是获取配置文件中的某项值,则推荐使用 @Value 注解;
  • 若专门编写了一个 JavaBean 来和配置文件进行映射,则建议使用 @ConfigurationProperties 注解。

在选用时,根据实际应用场景选择合适的注解能达到事半功倍的效果。

到此这篇关于SpringBoot @Value与@ConfigurationProperties二者有哪些区别的文章就介绍到这了,更多相关SpringBoot @Value与@ConfigurationProperties内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于JVM性能监控命令介绍

    基于JVM性能监控命令介绍

    下面小编就为大家带来一篇基于JVM性能监控命令介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • java中HashMap的原理分析

    java中HashMap的原理分析

    HashMap在Java开发中有着非常重要的角色地位,每一个Java程序员都应该了解HashMap。详细地阐述HashMap中的几个概念,并深入探讨HashMap的内部结构和实现细节,讨论HashMap的性能问题
    2016-03-03
  • Spring和activiti进行整合过程解析

    Spring和activiti进行整合过程解析

    这篇文章主要介绍了Spring和activiti进行整合过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • SpringBoot整合jersey的示例代码

    SpringBoot整合jersey的示例代码

    本篇文章主要介绍了SpringBoot整合jersey的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Java中的时间日期API知识点总结

    Java中的时间日期API知识点总结

    本文给大家总结了Java中的时间日期API知识点以及相关的实例代码分享,有兴趣的朋友参考学习下。
    2018-04-04
  • Spring Security 将用户数据存入数据库

    Spring Security 将用户数据存入数据库

    这篇文章主要介绍了Spring Security 如何将用户数据存入数据库,帮助大家更好的理解和学习Spring Security,感兴趣的朋友可以了解下
    2020-09-09
  • Java String相加底层原理分析

    Java String相加底层原理分析

    这篇文章主要介绍了Java String相加底层原理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • SpringBoot的application.yml不生效问题及解决

    SpringBoot的application.yml不生效问题及解决

    这篇文章主要介绍了SpringBoot的application.yml不生效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • SpringCloud中的Ribbon负载均衡器详细解析

    SpringCloud中的Ribbon负载均衡器详细解析

    这篇文章主要介绍了SpringCloud中的Ribbon负载均衡器详细解析,Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于 Netflix Ribbon 实现,通过封装可以让我们轻松地将面向服务的 REST 模版请求自动转换成客户端负载均衡的服务调用,需要的朋友可以参考下
    2024-01-01
  • 详解java WebSocket的实现以及Spring WebSocket

    详解java WebSocket的实现以及Spring WebSocket

    这篇文章主要介绍了详解java WebSocket的实现以及Spring WebSocket ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-01-01

最新评论