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

相关文章
|
存储 设计模式 Linux
Linux C/C++ reactor原理与实现
Linux C/C++ reactor原理与实现
353 0
|
消息中间件 自然语言处理 JavaScript
[5.0] How RocketMQ Proxy Startup?
本文分享RocketMQ Proxy是如何启动的,代码基于: https://github.com/apache/rocketmq/tree/release-5.0.0
2743 0
[5.0] How RocketMQ Proxy Startup?
|
11月前
|
Java Spring 容器
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
2331 3
|
Java 开发者 Spring
Bean生命周期介绍
Spring Boot 的 Bean 生命周期管理是其核心功能之一,负责应用程序中 Java 对象(称为 Beans)的创建、配置、初始化和销毁。此功能提供了灵活的依赖注入方式,便于组件化开发。Bean 生命周期包括实例化、属性注入、初始化方法调用、使用及销毁方法调用等阶段。应用场景涵盖依赖注入、配置管理、组件扩展及切面编程。通过实现特定接口或注解,开发者可轻松管理对象生命周期,优化应用性能。示例代码展示了如何通过日志观察 Bean 生命周期的不同阶段。
409 3
|
缓存 测试技术 API
电商平台 API 接入技术要点深度剖析
本文介绍了高效使用电商平台API的关键步骤。首先,深入理解API文档,明确功能权限与参数格式要求;其次,选择合适的接入方式,如HTTP/HTTPS协议和RESTful API;接着,实施身份验证与授权机制,确保数据安全传输;此外,还需关注性能优化、安全防护、监控与日志记录,以提升系统稳定性和响应速度;最后,进行充分测试与调试,并关注API版本更新,确保长期兼容性。
|
存储 网络协议 算法
UDP & TCP 超详解
本文详细介绍了UDP与TCP协议的相关知识。首先阐述了UDP协议结构,包括其报文格式、各字段含义及其CRC校验和机制。接着深入探讨了TCP协议,涵盖其协议结构、确认应答机制、超时重传策略、三次握手与四次挥手过程,以及滑动窗口、流量控制和拥塞控制等关键技术。最后分析了TCP在异常情况下的处理机制,如进程崩溃、主机关机、掉电和网线断开等情况。
399 6
|
缓存 安全 Java
Spring Boot中的自动配置机制详解
Spring Boot中的自动配置机制详解
|
SQL 人工智能 运维
在阿里云日志服务轻松落地您的AI模型服务——让您的数据更容易产生洞见和实现价值
您有大量的数据,数据的存储和管理消耗您大量的成本,您知道这些数据隐藏着巨大的价值,但是您总觉得还没有把数据的价值变现出来,对吗?来吧,我们用一系列的案例帮您轻松落地AI模型服务,实现数据价值的变现......
515 3
|
算法 芯片
基于51单片机点阵汉字显示程序设计
基于51单片机点阵汉字显示程序设计
基于51单片机点阵汉字显示程序设计