Spring Boot 中 @Value注解的使用示例详解
作者:wdwc2
一、前言
在 Spring Boot 项目中通常需要从 application.properties
或 application.yml
配置文件中读取配置信息。@Value
注解提供了一种简单的方式来将配置值注入到 Spring 组件中。
二、@Value 注解简介
@Value
是 Spring 提供的一个注解,用于从配置文件或其他来源(如系统环境变量、SpEL 表达式)中读取值并注入到 Bean 的字段或方法参数中。其基本语法如下:
@Value("${property.key}") private String propertyValue;
三、@Value 注解的常见用法
1. 读取 application.properties 或 application.yml 配置值
(1)配置文件示例
application.properties
app.name=Spring Boot Demo app.version=1.0.0
application.yml
app: name: Spring Boot Demo version: 1.0.0
(2)Java 代码示例
@Component public class AppConfig { @Value("${app.name}") private String appName; @Value("${app.version}") private String appVersion; public void printConfig() { System.out.println("Application Name: " + appName); System.out.println("Application Version: " + appVersion); } }
(3)测试输出
Application Name: Spring Boot Demo
Application Version: 1.0.0
2. 使用 @Value 设置默认值
如果配置文件中未定义某个属性,则 @Value
注解可以提供一个默认值。默认值的语法是 :${defaultValue}
:
@Component public class DefaultValueExample { @Value("${app.author:Unknown Author}") private String author; public void printAuthor() { System.out.println("Application Author: " + author); } }
如果 application.properties
或 application.yml
中未配置 app.author
,则输出:
Application Author: Unknown Author
3. 读取系统环境变量和 Java 运行时参数
@Value
也可以用于读取系统环境变量或 -D
方式传递的 JVM 运行参数:
@Component public class EnvConfig { @Value("${JAVA_HOME}") private String javaHome; @Value("${user.name}") private String userName; public void printSystemProperties() { System.out.println("JAVA_HOME: " + javaHome); System.out.println("User Name: " + userName); } }
如果运行环境变量设置了 JAVA_HOME=/usr/lib/jvm/java-11-openjdk
,则输出:
JAVA_HOME: /usr/lib/jvm/java-11-openjdk
User Name: admin
4. 结合 Spring Expression Language (SpEL)
@Value
注解支持 Spring 表达式语言(SpEL),可用于动态计算值。
(1)基本 SpEL 表达式
@Component public class SpELExample { @Value("#{2 * 5}") private int result; public void printResult() { System.out.println("Result: " + result); } }
输出:
Result: 10
(2)引用 Bean 的属性
@Component public class AnotherBean { private String message = "Hello from AnotherBean"; public String getMessage() { return message; } } @Component public class BeanReferenceExample { @Autowired private AnotherBean anotherBean; @Value("#{anotherBean.message}") private String messageFromAnotherBean; public void printMessage() { System.out.println(messageFromAnotherBean); } }
输出:
Hello from AnotherBean
5. 读取数组、集合和 Map 类型数据
(1)读取数组
app.servers=192.168.1.1,192.168.1.2,192.168.1.3
@Component public class ArrayConfig { @Value("${app.servers}") private String[] servers; public void printServers() { System.out.println(Arrays.toString(servers)); } }
输出:
[192.168.1.1, 192.168.1.2, 192.168.1.3]
(2)读取 List
@Component public class ListConfig { @Value("#{'${app.servers}'.split(',')}") private List<String> serverList; public void printServerList() { System.out.println(serverList); } }
输出:
[192.168.1.1, 192.168.1.2, 192.168.1.3]
(3)读取 Map
app.db.config=username:admin,password:123456,url:jdbc:mysql://localhost:3306/test
@Component public class MapConfig { @Value("#{${app.db.config}}") private Map<String, String> dbConfig; public void printDbConfig() { System.out.println(dbConfig); } }
输出:
{username=admin, password=123456, url=jdbc:mysql://localhost:3306/test}
四、@Value 和 @ConfigurationProperties 对比
特性 | @Value | @ConfigurationProperties |
---|---|---|
作用范围 | 适用于单个值注入 | 适用于整个配置对象映射 |
支持的数据类型 | 主要用于 String、基本类型、数组 | 可绑定复杂对象(如 List、Map、自定义对象) |
代码简洁性 | 适用于少量配置参数 | 适用于大量配置参数 |
是否支持 SpEL | 支持 | 不支持 |
示例:@ConfigurationProperties
用法
app.name=Spring Boot Demo app.version=1.0.0
@Configuration @ConfigurationProperties(prefix = "app") public class AppProperties { private String name; private String version; // getter & setter }
五、总结
- @Value 注解用于将配置文件中的值注入到 Spring 组件中。
- @Value 可用于读取 application.properties 或 application.yml 中的值,并支持默认值。
- @Value 还能用于读取环境变量、JVM 运行参数和 SpEL 表达式。
- @Value 可以解析数组、List、Map 等数据结构。
- 对于复杂配置推荐使用 @ConfigurationProperties,而 @Value 适用于简单值注入。
到此这篇关于Spring Boot 中 @Value注解的使用示例详解的文章就介绍到这了,更多相关Spring Boot @Value注解使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!