最新实战案例锦集:《Spring Boot3实战案例合集》持续更新,每天至少更新一篇文章,订阅后将赠送文章最后展示的所有MD文档(学习笔记)。
环境:SpringBoot3.2.5
1. 简介
@Value 是 Spring 中非常实用的一个注解,用于将配置文件中的属性值注入到 Bean 的字段中。它可以从多种来源读取值,包括属性文件、环境变量和系统属性等。使用 @Value 注解可以简化配置值的注入过程,使代码更加清晰和易于维护。该注解具有以下特定:
属性注入:可以直接将配置文件中的属性值注入到 Bean 的字段中
类型转换:支Spring内置了很多的类型转换器,可以自动将字符串配置转换为字段的类型,例如字符串可以自动转换为整数或布尔值。你也可以自定义类型转换器进行任意类型的转换。
默认值:可以为属性提供默认值,防止配置缺失时导致的空指针异常或是启动报错问题。
表达式支持:支持 SpEL表达式,可以进行复杂的属性值解析。
以下是常见的一些用法:
// 字段注入
@Value("${pack.app.title}")
private String title ;
// 方法参数注入
public PackComponent pc(@Value("pack.app.author") String author) {
// ...
}
// 默认值
@Value("pack.app.sno:0")
private Integer sno ;
// SpEL表达式
@Value("#{systemProperties['user.catalog'] + 'Catalog' }")
private String catalog
通常情况下,以上的用法已经完全能应付我们工作中的各种需要了。
@Value有一个重要的局限性:一次性注入。这意味着在 Bean 初始化时,@Value 注解会读取配置文件中的值并注入到字段中,但一旦 Bean 初始化完成,这些值就不会再自动更新。即使配置文件中的值发生变化,注入的值也不会随之改变。
要实现这种自动刷新功能,我之前写过一篇文章大家可以查看下面这篇文章:
但是,本篇文章将要教大家如何通过自定义@Value
注解,实现配置的实时刷新功能。
2. 实战案例
2.1 自定义元数据
@Target({
ElementType.FIELD,
ElementType.METHOD,
ElementType.PARAMETER,
ElementType.ANNOTATION_TYPE}
)
@Retention(RetentionPolicy.RUNTIME)
public @interface PackValue {
String value() ;
}
读取配置都将通过@PackValue进行。
2.2 自定义处理器BeanPostProcessor