【Spring Boot 中 `@Value` 注解的使用】
文章目录
- 一、前言
- 二、@Value 注解简介
- 三、@Value 注解的常见用法
- 1. 读取 `application.properties` 或 `application.yml` 配置值
- (1)配置文件示例
- (2)Java 代码示例
- (3)测试输出
- 2. 使用 `@Value` 设置默认值
- 3. 读取系统环境变量和 Java 运行时参数
- 4. 结合 Spring Expression Language (SpEL)
- (1)基本 SpEL 表达式
- (2)引用 Bean 的属性
- 5. 读取数组、集合和 Map 类型数据
- (1)读取数组
- (2)读取 `List`
- (3)读取 `Map`
- 四、@Value 和 `@ConfigurationProperties` 对比
- 五、总结
一、前言
在 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 Demoversion: 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 {@Autowiredprivate 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` 注解的使用】
文章目录 一、前言二、Value 注解简介三、Value 注解的常见用法1. 读取 application.properties 或 application.yml 配置值(1)配置文件示例(2)Java 代码示例(3)测试输出 2. 使用 Value 设置默认值3. 读取系…...
分布式数据库系统(DDBS)
分布式数据库系统(DDBS) (Distributed Database System)的概念及其特点: 分布式数据库系统是一种数据库系统,它将数据分散存储在多个地理上分散的节点上,通过一个全局数据库管理系统(DBMS)来协调…...
2025年,电脑还需要分区吗?
随着2025年的到来,电脑存储空间已经不像以前那么金贵,固态硬盘(SSD)容量更大、速度更快,云存储也成了日常标配。许多人开始质疑:电脑还需要像以前那样分区吗? 一、分区到底是什么意思ÿ…...
一个成功的Git分支模型
本作品原发布账号为【白鸽子中文网】,现转至当前账号【飞翔中文网】。 反思备录(2020/3/5) 这个模型构思于2010年,现已过去10余年,(2010年)那时正处于Git诞生后不久。在这10年间,git-flow(本文中提到的分支模型) 在许多软件队伍里…...
Kafka可视化工具KafkaTool工具的使用
Kafka Tool工具 介绍 使用Kafka的小伙伴,有没有为无法直观地查看 Kafka 的 Topic 里的内容而发过愁呢?下面推荐给大家一款带有可视化页面的Kafka工具:Kafka Tool (目前最新版本是 3.0.2) 注意:以前叫Kafk…...
【嵌入式Linux】基于ArmLinux的智能垃圾分类系统项目
目录 1. 功能需求2. Python基础2.1 特点2.2 Python基础知识2.3 dict嵌套简单说明 3. C语言调用Python3.1 搭建编译环境3.2 直接调用python语句3.3 调用无参python函数3.4 调用有参python函数 4. 阿里云垃圾识别方案4.1 接入阿里云4.2 C语言调用阿里云Python接口 5. 香橙派使用摄…...
同等学力申硕-计算机专业-数学基础-历年真题和答案解析
同等学力申请硕士学位考试是比较适合在职人员的提升学位方式,了解过的人应该都知道,现在社会的竞争压力越来越大,为了提高职业生存能力,提升学位在所难免。 为了通过同等学力申请硕士学位考试,对于计算机专业的人来说…...
网络安全漏洞与修复 网络安全软件漏洞
文章目录 一、软件漏洞的概念 1、信息安全漏洞简述2、软件漏洞3、软件漏洞概念4、软件漏洞的成因分析 二、软件漏洞标准化管理 1、软件漏洞分类2、软件漏洞分级3、安全漏洞管理规范 一、软件漏洞的概念 1、信息安全漏洞简述 信息安全漏洞是信息安风险的主要根源之一&…...
STM32:Default_Handler问题
记录代码进入Default_Handler错误的解决办法 一、 问题表述 在一次调试代码的时候,发现代码卡死在启动文件 startup_at32f423xx_.s 的367行,即 B. 处B.是汇编代码,B:跳转到一个标号,这里跳转到一个‘.’,…...
iwebsec-SQL数字型注入
1.判断是否存在漏洞 添加and 11发现正常显示,添加and 12无回显条目,则存在sql注入漏洞 2.因为有回显,尝试union联合注入,使用order by判断出有3个字段 3.使用union联合注入查看回显位,发现3三个字段均有回显ÿ…...
基于Spring Boot的冷链物流系统的设计与实现的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
LLM(6):理解词嵌入
深度神经网络模型,包括 LLM,无法直接处理原始文本。由于文本是分类的,它与用于实现和训练神经网络的数学操作不兼容。因此,我们需要一种方法来将词语表示为连续值向量。 注意:如果读者对向量和张量不太了解,…...
SQLMesh系列教程:利用date_spine宏构建日期序列实践指南
引言:为什么需要日期维度表? 在数据分析和报表开发中,日期维度表是不可或缺的基础结构,其中包括一定日期范围的日期序列,每个序列包括对应日期属性,如年季月日、是否周末等。无论是计算日粒度销售额、分析…...
sqlite mmap
https://www.sqlite.org/mmap.html 1. 内存映射 I/O 的基本原理 默认机制(传统 I/O) SQLite 默认通过 xRead() 和 xWrite() 方法(对应 read()/write() 系统调用)访问数据库文件。这些方法需要将数据从内核缓冲区复制到用户空间&am…...
Java 大视界 -- 企业数字化转型中的 Java 大数据战略与实践(93)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
Unity Enlighten与Progressive GPU Lightmapper对比分析
一、技术背景与核心差异 1. 算法原理 Enlighten 基于辐射度算法(Radiosity),通过将场景分解为Systems(光照关联单元)和Clusters(计算单元),预计算光照环境中的间接光传输。其核心是…...
linux:环境变量,进程地址空间
一.命令行参数 main的参数:int argc,char*argv[],char*env[] 1.参数意义: argc是命令行调用次程序时传递的参数 例: ls -l -a 传递了三个参数,“ls" "-l" "-a"三个字符串 argv是传递的参…...
mybatis集合映射association与collection
官方文档:MyBatis的一对多关联关系 一、用途 一对一:association 一对多:collection 二、association 比较容易理解,可参考官方文档 三、collection <?xml version"1.0" encoding"UTF-8"?> &l…...
【AIGC】Win10系统极速部署Docker+Ragflow+Dify
【AIGC】WIN10仅3步部署DockerRagflowDify 一、 Docker快速部署1.F2进入bios界面,按F7设置开启VMX虚拟化技术。保存并退出。2.打开控制面板配置开启服务3.到官网下载docker安装包,一键安装(全部默认勾选) 二、 RagFlow快速部署1.确…...
全局上下文网络GCNet:创新架构提升视觉识别性能
摘要:本文介绍了全局上下文网络(GCNet),通过深入分析非局部网络(NLNet),发现其在重要视觉识别任务中学习的全局上下文与查询位置无关。基于此,提出简化的非局部模块、全局上下文建模…...
鸿蒙NEXT项目实战-百得知识库03
代码仓地址,大家记得点个star IbestKnowTeach: 百得知识库基于鸿蒙NEXT稳定版实现的一款企业级开发项目案例。 本案例涉及到多个鸿蒙相关技术知识点: 1、布局 2、配置文件 3、组件的封装和使用 4、路由的使用 5、请求响应拦截器的封装 6、位置服务 7、三…...
Linux上位机开发实战(qt编译之谜)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 很多同学都喜欢用IDE,也能理解。因为不管是visual studio qt插件,还是qt creator其实都帮我们做了很多额外的工作。这里面最…...
【人工智能】【Python】在Scikit-Learn中使用网格搜索对决策树调参
这次实践课最大收获非网格搜索莫属。 # 导入包 import matplotlib.pyplot as plt import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split, GridSearchCV # 网格搜索 from sklearn.tree import DecisionTreeClassi…...
用Python代码生成批量下单json
需求 根据以下json体,生成230OrderList对象生成10位有序的数字字母随机数赋值给OrderDetailList.ApiOrderId 和 OrderDetailList.Traceid生成的Json文件 保存在项目JSON目录中 {"UAccount": "xxxx","Password": "","…...
笔记:代码随想录算法训练营day56:图论理论基础、深搜理论基础、98. 所有可达路径、广搜理论基础
学习资料:代码随想录 连通图是给无向图的定义,强连通图是给有向图的定义 朴素存储:二维数组 邻接矩阵 邻接表:list基础知识:C 容器类 <list> | 菜鸟教程 深搜是沿着一个方向搜到头再不断回溯,转…...
Elasticsearch8.17 集群常见问题排查与解决
一、磁盘水位错误(Flood-Stage Watermark) 当数据节点磁盘空间极度不足并达到洪水阶段水位时,系统会记录以下错误: Error: disk usage exceeded flood-stage watermark, index has read-only-allow-delete block。 为防止磁盘写满,Elasticsearch 会阻止对受影响节点上分片…...
TCP、UDP协议的应用、ServerSocket和Socket、DatagramSocket和DatagramPacket
DAY13.1 Java核心基础 TCP协议 TCP 协议是面向连接的运算层协议,比较复杂,应用程序在使用TCP协议之前必须建立连接,才能传输数据,数据传输完毕之后需要释放连接 就好比现实生活中的打电话,首先确保电话打通了才能进…...
配置VMware Workstation中Ubuntu虚拟机与Windows主机的剪贴板共享功能
步骤1:安装或更新VMware Tools组件 卸载旧版本工具(可选) 若已安装旧版工具,建议先卸载: sudo apt-get autoremove open-vm-tools安装必需组件 sudo apt-get updatesudo apt-get install open-vm-tools o…...
深入理解Python闭包与递归:原理、应用与实践
目录 闭包 什么是闭包: 闭包的基本结构: 实现闭包的条件: 1.嵌套函数 2.内函数引用外部函数的变量 3.外部函数返回内部函数 4.外部函数已经执行完毕 递归函数 什么是递归函数: 递归函数条件 1.必须有个明确的结束条…...
第7章:Docker容器网络模型深度剖析
第7章:Docker容器网络模型深度剖析 作者:DogDog_Shuai 阅读时间:约30分钟 难度:高级 目录 1. 引言2. Docker网络架构3. Docker网络模式详解4. Docker网络配置5. Docker网络故障排查6. 总结1. 引言 Do...
