Spring Boot 中 @Value注解的使用示例详解

 更新时间:2025年05月16日 09:55:32   作者:wdwc2  
@Value是Spring提供的一个注解,用于从配置文件或其他来源(如系统环境变量、SpEL表达式)中读取值并注入到Bean的字段或方法参数中,这篇文章主要介绍了SpringBoot中@Value注解的使用,需要的朋友可以参考下

一、前言

在 Spring Boot 项目中通常需要从 application.propertiesapplication.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.propertiesapplication.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注解使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot中通过AOP整合日志文件的实现

    SpringBoot中通过AOP整合日志文件的实现

    本文主要介绍了SpringBoot中通过AOP整合日志文件的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Spring自动注入失败的解决方法

    Spring自动注入失败的解决方法

    这篇文章主要介绍了Spring自动注入失败的解决方法,帮助大家更好的理解和学习使用Spring框架,感兴趣的朋友可以了解下
    2021-05-05
  • 使用java实现百万级别数据导出excel的三种方式

    使用java实现百万级别数据导出excel的三种方式

    这篇文章主要介绍了使用java实现百万级别数据导出excel的三种方式,有些业务系统可能动辄涉及到百万上千万的数据,用正常的方法效率就变得很低,今天我们来看看这几种实现思路
    2023-03-03
  • 详解Java如何判断一个对象是否为空

    详解Java如何判断一个对象是否为空

    我们在刚开始学习Java的时候,遇到过最多的异常肯定是臭名昭著的空指针异常(NullPointerException),可以说它陪伴了我们整个初学阶段,那么如何优雅的判断一个对象是否为空并且减少空指针异常呢,
    2024-01-01
  • 浅谈Java三目运算

    浅谈Java三目运算

    本文给大家主要介绍的是java中三目运算的详细介绍,并附上2个示例,希望对大家理解三目运算能够有所帮助。
    2015-03-03
  • Spring Boot 整合 JWT的方法

    Spring Boot 整合 JWT的方法

    这篇文章主要介绍了Spring Boot 整合 JWT的方法,文中实例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Java编程GUI中的事件绑定代码示例

    Java编程GUI中的事件绑定代码示例

    这篇文章主要介绍了Java编程GUI中的事件绑定代码示例,简单介绍了绑定的概念,然后分享了相关代码,具有一定参考价值,需要的朋友可以参考下。
    2017-10-10
  • Java某个经纬度是否在genjson文件中问题

    Java某个经纬度是否在genjson文件中问题

    GeoJSON是一种用于地理空间信息数据交换的格式,基于JSON,要判断某个经纬度是否在某个区域内,首先需要解析GeoJSON文件,确定区域边界,然后使用经纬度进行比较
    2024-11-11
  • springboot layui hutool Excel导入的实现

    springboot layui hutool Excel导入的实现

    本文主要介绍了springboot layui hutool Excel导入的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • JDBC简介_动力节点Java学院整理

    JDBC简介_动力节点Java学院整理

    什么是JDBC?这篇文章就为大家详细介绍了Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07

最新评论