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。

六、常见坑点

  1. 字段不能是 static 的,@Value 无法注入静态字段。
  2. 所在类必须被 Spring 管理(加 @Component / @Service 等注解)。
  3. 占位符拼写错误或配置文件未加载会导致启动失败。
  4. 需要随配置中心动态刷新的配置,@Value 不会自动刷新,应改用 @ConfigurationProperties。
标签
Spring注解配置