1. 概述

Spring 的 @Value 注解提供了一种便捷的方式将属性值注入到组件中。当属性可能不存在时,设置合理的默认值尤其有用。

本文将重点介绍如何为 Spring 的 @Value 注解指定默认值。关于 @Value 的更详细指南,可参考这篇文章

2. 字符串默认值

String 类型属性设置默认值的基本语法如下:

@Value("${some.key:my default value}")
private String stringWithDefaultValue;

如果 some.key 无法解析,stringWithDefaultValue 将被设置为默认值 my default value

同样,我们可以设置空字符串作为默认值:

@Value("${some.key:}")
private String stringWithBlankDefaultValue;

⚠️ 注意:冒号后直接跟引号表示空字符串,而不是省略默认值。

3. 基本数据类型

对于 booleanint 等基本数据类型,直接使用字面量设置默认值:

@Value("${some.key:true}")
private boolean booleanWithDefaultValue;
@Value("${some.key:42}")
private int intWithDefaultValue;

✅ 如果需要,也可以改用包装类型 BooleanInteger,语法完全相同。

4. 数组类型

我们还可以将逗号分隔的值列表注入数组:

@Value("${some.key:one,two,three}")
private String[] stringArrayWithDefaults;

@Value("${some.key:1,2,3}")
private int[] intArrayWithDefaults;
  • 第一个例子中,默认值 onetwothree 会被注入到 stringArrayWithDefaults
  • 第二个例子中,默认值 123 会被注入到 intArrayWithDefaults

⚠️ 踩坑提示:数组默认值不支持空格分隔,必须使用逗号!

5. 使用 SpEL 表达式

还可以使用 Spring 表达式语言(SpEL)指定表达式和默认值。下面这个例子中:

@Value("#{systemProperties['some.key'] ?: 'my default system property value'}")
private String spelWithDefaultValue;

我们期望 some.key 作为系统属性存在,如果未设置,则使用 my default system property value 作为默认值。

✅ 这种方式特别适合处理动态值或复杂逻辑,比单纯属性注入更灵活。

6. 总结

本文快速介绍了如何为 Spring @Value 注解注入的属性设置默认值。关键点总结:

  • 基本类型:直接使用字面量(如 true42
  • 字符串:用冒号分隔(${key:default}
  • 数组:逗号分隔值(${key:v1,v2,v3}
  • 复杂场景:使用 SpEL 表达式(#{... ?: 'default'}

所有示例代码均可在 GitHub 项目 中找到。


原始标题:Using Spring @Value with Defaults | Baeldung