java
技术随笔
@Value 注解使用总结:配置注入、默认值、SpEL 与常见坑
@Value 是 Spring 中最常用的属性注入注解,可以把配置文件、系统属性、环境变量甚至 SpEL 表达式的值注入到 Bean 的字段或参数中。下面系统梳理它的常见用法与坑点。
一、注入配置项(最常用)
@Component
public class ConfigBean {
@Value("${app.name}")
private String appName;
}
对应 application.yml 中的 app.name=demo。
二、设置默认值
@Value("${app.timeout:30}")
private int timeout; // 未配置时取 30
语法是 ${key:默认值},默认值支持字符串、数字、布尔等类型。
三、注入系统属性与环境变量
@Value("${JAVA_HOME}")
private String javaHome;
四、使用 SpEL 表达式
@Value("#{systemProperties['os.name']}")
private String osName;
@Value("#{2 * 10}")
private int result; // 结果为 20
注意:${} 是属性占位符,#{} 是 SpEL 表达式,二者不要混淆。
五、注入数组 / 集合
@Value("#{'${app.hosts}'.split(',')}")
private List<String> hosts;
配置 app.hosts=192.168.1.1,192.168.1.2,会按逗号拆分成 List。
六、常见坑点
- 字段不能是
static的,@Value 无法注入静态字段。 - 所在类必须被 Spring 管理(加 @Component / @Service 等注解)。
- 占位符拼写错误或配置文件未加载会导致启动失败。
- 需要随配置中心动态刷新的配置,@Value 不会自动刷新,应改用 @ConfigurationProperties。