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. 基本数据类型
对于 boolean
和 int
等基本数据类型,直接使用字面量设置默认值:
@Value("${some.key:true}")
private boolean booleanWithDefaultValue;
@Value("${some.key:42}")
private int intWithDefaultValue;
✅ 如果需要,也可以改用包装类型 Boolean
和 Integer
,语法完全相同。
4. 数组类型
我们还可以将逗号分隔的值列表注入数组:
@Value("${some.key:one,two,three}")
private String[] stringArrayWithDefaults;
@Value("${some.key:1,2,3}")
private int[] intArrayWithDefaults;
- 第一个例子中,默认值
one
、two
、three
会被注入到stringArrayWithDefaults
- 第二个例子中,默认值
1
、2
、3
会被注入到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
注解注入的属性设置默认值。关键点总结:
- 基本类型:直接使用字面量(如
true
、42
) - 字符串:用冒号分隔(
${key:default}
) - 数组:逗号分隔值(
${key:v1,v2,v3}
) - 复杂场景:使用 SpEL 表达式(
#{... ?: 'default'}
)
所有示例代码均可在 GitHub 项目 中找到。