java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot @Value与@ConfigurationProperties

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

作者:沫洺

这篇文章主要介绍了SpringBoot @Value与@ConfigurationProperties二者的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

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

区别@ConfigurationProperties@Value
使用位置不同标注在 JavaBean 的类名上标注在 JavaBean 的属性上
功能不同用于批量绑定配置文件中的配置单值绑定
松散绑定(松散语法)支持部分支持
Spel不支持支持
复杂类型封装支持支持,比较繁琐
JSR303数据校验支持不支持
应用场景不同通过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:支持松散绑定(松散语法),例如实体类 Person 中有一个属性为 firstName,那么配置文件中的属性名支持以下写法:

@Vaule:不支持松散绑定。

SpEL 支持不同

SpEL表达式:#{obj}

@Value("#{${girl.hobbyMap}}")
private Map<String,Object> hobbyMap;

复杂类型封装

属性校验

@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 两个注解之间,并没有明显的优劣之分,它们只是适合的应用场景不同而已。

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

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

您可能感兴趣的文章:
阅读全文