@Value适用于注入简单配置项,需在Spring管理的Bean中使用,支持默认值和基本类型转换,但不支持复杂结构和静态字段,推荐@ConfigurationProperties替代。

在 Spring Boot 中,@Value 是最常用的轻量级配置注入方式,适合读取简单、固定类型的配置项(如字符串、数字、布尔值等),但需注意使用场景和限制。
配置文件中定义参数
Spring Boot 默认支持 application.properties 或 application.yml。确保参数写在正确位置,且 key 符合命名规范(小写字母+连字符):
-
application.properties示例:app.name=MyService<br>server.port=8080<br>feature.enabled=true<br>database.timeout=3000
-
application.yml示例:app:<br> name: MyService<br>server:<br> port: 8080<br>feature:<br> enabled: true<br>database:<br> timeout: 3000
在类中用 @Value 注入值
必须在 Spring 管理的 Bean(如 @Component、@Service、@RestController)中使用,不能用于普通 new 出来的对象:
- 基本语法:
@Value("${key}"),例如:@Value("${app.name}") private String appName; - 提供默认值(避免启动失败):
@Value("${app.version:1.0.0}") private String version; - 类型自动转换支持:
int、long、boolean、float等,Spring 会尝试转换:@Value("${server.port:8080}") private int port;<br>@Value("${feature.enabled:false}") private boolean featureEnabled;
常见问题与注意事项
@Value 看似简单,但容易出错,关键点如下:
立即学习“Java免费学习笔记(深入)”;
- 配置项不存在且没设默认值时,应用启动会抛
IllegalArgumentException;务必加默认值或确认配置已加载 - 不支持复杂结构(如 List、Map),也不推荐用 SpEL 解析嵌套对象;应改用
@ConfigurationProperties - 不能直接在静态字段上使用(
static+@Value无效),可借助 setter 或构造器注入 - 如果配置来自 profile-specific 文件(如
application-dev.properties),要确保当前 profile 已激活(spring.profiles.active=dev)
替代方案建议
当配置较多、有层级或需校验时,@Value 维护成本高,推荐升级为 @ConfigurationProperties:
- 新建一个带
@ConfigurationProperties(prefix = "app")的类,字段名与 yml 层级对齐 - 配合
@Validated做校验(如@NotBlank、@Min(1)) - 支持松散绑定(
my-prop↔myProp)、类型安全、IDE 提示友好


















