@ConfigurationProperties 与 @Value区别 | 学习笔记

简介: 快速学习 @ConfigurationProperties 与 @Value 区别

开发者学堂课程【 SpringBoot 快速掌握 - 核心技术ModelScope pretrained model 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/612/detail/9225


@ConfigurationProperties 与 @Value 区别


目录:

一.前言

二.@value 获取值和 @configurationProperties 获取值比较

三.配置文件注入值数据校验


一. 前言

另外一种获取值的方式:

/**

*

*  

字面量 /${key} 从环境变量、配置文件中获取值/

#{SpEL”} **/@Value (“${person.last-name}”)Private String lastName;@Value (“#{11*2}”)Private Integer age;@Value(“true”)Private Boolean boss;Private Date birth;Private Mapmaps;Private Listlists;Private Dog dog;

除 @configurationProperties 从配置文件中读取 person 内部所有属性之外,还有另外一个方式。

从前使用的方式是配置方式,例如配 bean 标签时使用。在标签 bean 中,为某一个组件创建对象,写出 person 类型,包括创建时每个属性所述之值,写出 property 标签,用 name 。来指定所赋值的属性名: LastName 。 Value 为指定值。 Value 与 @Value 注解为一致。

同样 @Component 注解的作用也是把 person 加入容器中,标签也是加入其中。而这时 value 赋值则下方就是用  @value 注解来赋值。

Value 可写为字面量,同样可以写 { key }/$ ,其中 { key }}作用为从环境变量,配置文件中获取值。第三种可写为 #/{SpEL} 表达式语言。则 @Value 注解同样支持。

若想获取配置文件中 lastName ,则 @Value (“ ${ Person.Last- name }”)= 从配置文件中获取。

结论:

Person{ lastName='张三', age=22,boss=true

@vulue 也可。

但与 @ConfigurationProperties 是否存在区别?

@ConfigurationProperties 只需一个注解,批量进行注入。而 @vulue 需要一个一个进行注入。

 

二.@value 获取值和 @configurationProperties 获取值比较

@value 获取值和 @configurationProperties 获取值比较

 

@ConfigurationProperties

@Value

功能

批量注入配置文件中的属性

一个个指定

松散绑定(松散语法)

支持

不支持

Spel

不支持

支持

JSR303 数据校验

支持

不支持

复杂类型封装

支持

不支持

松散绑定(松散语法):特别是 Last-name 若在此种情况下:

属性名为:

firstName (驼峰命名法); first-name ; first_name;PERSON_FIRST_NAME ;均可。

只有 @ConfigurationProperties 支持此特点。

@vulue 设为 lastName

由于文件类为 last-name ,看是否支持运行?

显示报错服务!获取值出现问题。必须为 last-name 不支持松散绑定!

打开 @ConfigurationProperties ( prefix = "person" ),进行运行

结果:

Person{lastName=“张三”}

则 @ConfigurationProperties 支持!

@Value 可计算出结果,同样 age 尝试配置。

Person*age=#[11*2]

进行运行,输出结果错误!

原因在于注入值时,需要通过 typeMismatch 转化。

@ConfigurationProperties Validation

–支持JSR303进行配置文件值校验;

从配入文件值时,可进行校验。

使用注解 @Validated

进行校验,

制定规则: @Email(last-name 填成邮箱格式)

在 ConfigurationProperties 下进行运行:

结果报错!错误代码:

Email.person.las-tName,default message

[不是一个合法的电子邮件地址]

说明 @ Email 启动校验。

若换为 @value Value("${person. last-name}")注入值

结果:校验结果无效。{张三依旧取到对应值}

若想知道何时最大不同,则看最大区别:

ConfigurationProperties 与 @value

@ConfigurationProperties (  prcfix  = “ person ”)获取值正常。并可进行校验。此处删除。

此处以如下为例:

@value(“ $(person.maps ”)

结果:报错!最大位于原表格中。

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

只是每一个值的区别由此进行了对比。包括 JSR303 数据校验。

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

例子:

image.png

@RestControllerpublie class HelloController {@Value(""${person.last-name》")private String name; @RequestMapping(" /mayHello")publie String sayHello(o)4return "Hello "name;}}

进行请求访问:

打招呼的人,为某项配置的值,在配置文件中进行获取。

显示结果不正确。

对之前配置页面进行配置完成。如下:

@ value( "s{person.maps}")

再次启动。进行 sayhello 请求。

访问:

image.png

image.png

如果说,专门编写了一个 javaBean 来和配置文件进行映射﹔(类似于跟数据库内部的记录映射专门写出一个 poor joe ,写出一个 javabean 配置文件中的值),就直接使用 @ConfigurationProperties  ;

这就是他们之间的区别。

当然在合适的时候,如果需要用到其他注解,那么就以上两个结合着用,这是他们的区别。

 

三、配置文件注入值数据校验

@Component@ConfigurationProperties(prefix = "person" )@Validatedpublic class Person {* 字面量/${key}从环境变量、配置文件中获取值/#{SpEL]}">*/

//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 maps;private List lists;private Dog dog;

这为ConfigurationProperties与@value取值不同。

相关文章
|
8天前
|
Java 开发者 Spring
Spring Framework 中的 @Autowired 注解:概念与使用方法
【4月更文挑战第20天】在Spring Framework中,@Autowired 注解是实现依赖注入(Dependency Injection, DI)的一种非常强大的工具。通过使用 @Autowired,开发者可以减少代码中的引用绑定,提高模块间的解耦能力
30 6
|
1月前
|
Java Spring 容器
Spring中@Autowired和@Resource注解异同点
Spring中@Autowired和@Resource注解异同点
33 0
|
8月前
|
XML Java 数据格式
SpringBoot入门(五) 之 @ConfigurationProperties和@Value的区分与用法
SpringBoot入门(五) 之 @ConfigurationProperties和@Value的区分与用法
|
8月前
|
存储 Java 程序员
探秘Spring中Bean的注解宝典:解读存取Bean的相关注解及用法
探秘Spring中Bean的注解宝典:解读存取Bean的相关注解及用法
|
存储 XML 设计模式
更方便Spring存储和读取对象,五大类注解、@Bean、@Autowired、@Resource
更方便Spring存储和读取对象,五大类注解、@Bean、@Autowired、@Resource
161 0
更方便Spring存储和读取对象,五大类注解、@Bean、@Autowired、@Resource
|
Java 微服务 Spring
Spring中@Value和@ConfigurationProperties区别
Spring中@Value和@ConfigurationProperties区别
176 0
Spring中@Value和@ConfigurationProperties区别
|
JSON API 分布式数据库
Bean 方式|学习笔记
快速学习 Bean 方式。
88 0
|
分布式数据库 流计算 开发者
bean 方式 | 学习笔记
快速学习 bean 方式
66 0
|
Java 数据库连接 数据库
【SpringBoot2 从0开始】底层注解 - @ConfigurationProperties 配置绑定
【SpringBoot2 从0开始】底层注解 - @ConfigurationProperties 配置绑定
【SpringBoot2 从0开始】底层注解 - @ConfigurationProperties 配置绑定
|
Java Spring
spring学习14-Autowired的使用场景
spring学习14-Autowired的使用场景
85 0