@Value注解用于将配置文件中的值注入Spring管理的Bean字段,支持SpEL表达式、默认值、类型自动转换及嵌套配置引用,需配合@Component等注解或@Bean方法使用。

在 Java 的 Spring 项目中,@Value 注解可用于将配置文件(如 application.properties 或 application.yml)中的值直接注入到类的字段中,无需手动读取配置文件。
确保配置文件中有对应项
先在 application.properties 中定义配置项,例如:
app.name=myApp
server.port=8080
database.url=jdbc:mysql://localhost:3306/test
或在 application.yml 中写成:
立即学习“Java免费学习笔记(深入)”;
app:
name: myApp
server:
port: 8080
database:
url: jdbc:mysql://localhost:3306/test
在类中用 @Value 注入值
使用 @Value 时需注意语法格式,支持 SpEL 表达式。常用写法包括:
-
@Value("${app.name}")—— 直接取配置项,若不存在会启动失败 -
@Value("${app.name:defaultName}")—— 提供默认值,配置缺失时使用defaultName -
@Value("#{systemProperties['user.home']}")—— 使用 SpEL 读取系统属性(较少用) - 支持类型自动转换:字符串、数字、布尔值等都能自动转为目标字段类型
必须配合 Spring 管理的 Bean 使用
@Value 只对 Spring 容器管理的 Bean 生效,即类需满足以下任一条件:
- 被
@Component、@Service、@Controller等注解标记 - 在配置类中通过
@Bean方法返回 - 不是 new 出来的普通对象(否则注入为空,无报错但值为 null)
处理嵌套配置和特殊字符
YAML 中的嵌套结构(如 database.url)可直接用点号路径引用;若配置值含特殊字符(如 :、/),建议用单引号包裹:
database.url='jdbc:mysql://localhost:3306/test'
同时,字段需声明为 public、protected 或包访问权限(不能是 private 且无 setter——Spring 4.3+ 支持 private 字段 + @Value,但推荐加 private 并确保有默认构造函数)


















