IT评测·应用市场-qidao123.com技术社区
标题:
【Spring Boot 中 `@Value` 注解的利用】
[打印本页]
作者:
王國慶
时间:
2025-3-21 01:09
标题:
【Spring Boot 中 `@Value` 注解的利用】
一、媒介
在 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 实用于简单值注入。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/)
Powered by Discuz! X3.4