我是靠谱客的博主 安详香氛,最近开发中收集的这篇文章主要介绍@ConfigurationProperties与@Value区别@ConfigurationProperties与@Value区别总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • @ConfigurationProperties与@Value区别
    • 使用位置
    • 二者功能不同
    • 松散绑定
    • SpEL
    • 复杂类型封装
  • 总结

@ConfigurationProperties与@Value区别

使用位置

  • @ConfigurationProperties:标注在JavaBean的类名上;
  • @Value:标注在JavaBean的属性上。

@ConfigurationProperties位置如下:

在这里插入图片描述
@Value位置如下:

在这里插入图片描述

二者功能不同

@ConfigurationProperties是可以批量注入的,一次搞定,而@Value只能一个一个注入,

如下:

//@Value:注意一个容器已经存在的对象  @Value("${student.student-name}")
@Value("${student.student-name}")
private String studentName;
@Value("${student.age}")
private Integer age;
@Value("true")
private Boolean sex;//男代表true

但是我们使用@ConfigurationProperties就配置一行就完事了:

// 读取主配置文件中的数据,赋值给student对象
// prefix: 需要属性,指定主配置文件中的数据
@ConfigurationProperties(prefix = "student") 
public class Student {
	private String studentName;
	private Integer age;
	private Boolean sex;//男代表true
}

松散绑定

PS:什么是松散绑定????

松散绑定是springboot在使用 @EnableConfigurationProperties 注解里面提出来的,也就是说在application.yml文件中,可以不那么严格的去命名变量名。

松散语法属性名匹配规则是这样的:

  • studentName:使用标准驼峰方式
  • student-name:一般小写用-
  • STUDENT_NAME:一般大写用_

比如说ipaddress可以在配置文件中有多种出线形势,但是在代码里面还是要以驼峰命名。

ipAddress: 192.168.0.1  // 驼峰命名
ipaddress: 192.168.0.1  // 
ip_Address: 192.168.0.1  // 下划线命名
ip-address: 192.168.0.1 // -线命名

在代码中:

@Component
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
    private String ipAddress;
}

PS结束了

@ConfigurationProperties支持松散绑定studentName可以写为student-name都没有问题。而@Value不可以。@Value进行绑定时,名称只能与application.properties中属性的名称相同

SpEL

@ConfigurationProperties不支持SpEL,比如:

properties中配置

#配置student
student.student-name=jack
student.age=#{18+5}   //这里是直接报错
student.sex=true

Yml文件配置不支持SpEL

student:
  student-name: rose@qq.com
  age: #{18+8}    #不会报错,但是不能注入到student的age中
  sex: false

@Value支持SpEL。比如:

@Value("#{18+8}")
private Integer age;

Age是可以正常注入的。

复杂类型封装

@ConfigurationProperties支持复杂类型封装
@Value不支持复杂类型,只支持字符串,和基本数据类型及其包装类。

总结

区别@ConfigurationProperties@Value
位置类名上属性上
功能批量注入属性文件中的属性一个个的指定
松散绑定(松散语法)支持不支持
SpEL不支持支持
JSR303数据校验支持不支持
复制类型封装支持不支持

最后

以上就是安详香氛为你收集整理的@ConfigurationProperties与@Value区别@ConfigurationProperties与@Value区别总结的全部内容,希望文章能够帮你解决@ConfigurationProperties与@Value区别@ConfigurationProperties与@Value区别总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(84)

评论列表共有 0 条评论

立即
投稿
返回
顶部