@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取值不同。

相关文章
|
7月前
|
前端开发 Java 数据格式
【Spring系列笔记】定义Bean的方式
在Spring Boot应用程序中,定义Bean是非常常见的操作,它是构建应用程序的基础。Spring Boot提供了多种方式来定义Bean,每种方式都有其适用的场景和优势。
116 2
|
7月前
|
存储 Java 程序员
【JavaEE进阶】 Spring使用注解存储对象
【JavaEE进阶】 Spring使用注解存储对象
|
XML Java 数据格式
SpringBoot入门(五) 之 @ConfigurationProperties和@Value的区分与用法
SpringBoot入门(五) 之 @ConfigurationProperties和@Value的区分与用法
160 0
|
存储 Java 程序员
探秘Spring中Bean的注解宝典:解读存取Bean的相关注解及用法
探秘Spring中Bean的注解宝典:解读存取Bean的相关注解及用法
|
Java 微服务 Spring
Spring中@Value和@ConfigurationProperties区别
Spring中@Value和@ConfigurationProperties区别
254 0
Spring中@Value和@ConfigurationProperties区别
|
缓存 NoSQL 安全
Spring声明式基于注解的缓存(2-实践篇)
目录 一、序言 二、使用示例 1、配置 (1) application.properties (2) 基于Redis缓存的CacheManager配置 2、注解运用测试用例 (1) 指定key条件式缓存 (2) 返回值为Optional类型条件式缓存 (3) 不指定key条件式缓存 (4) 指定key删除缓存 (5) 指定key更新缓存 三、结语
Spring声明式基于注解的缓存(2-实践篇)
|
Java 容器 Spring
Spring基础篇:利用注解将外部Properties属性注入到Bean中的方法
利用注解将外部Properties属性注入到Bean中的方法
172 0
|
Java 数据库连接 数据库
【SpringBoot2 从0开始】底层注解 - @ConfigurationProperties 配置绑定
【SpringBoot2 从0开始】底层注解 - @ConfigurationProperties 配置绑定
【SpringBoot2 从0开始】底层注解 - @ConfigurationProperties 配置绑定
|
JSON API 分布式数据库
Bean 方式|学习笔记
快速学习 Bean 方式。
123 0
|
Java Spring 容器
spring学习笔记(一)@ConfigurationProperties注解
spring学习笔记(一)@ConfigurationProperties注解
142 0