【发布时间】:2017-01-25 21:20:43
【问题描述】:
使用 SpEL 的 Spring @Value 注释有一个有趣的问题。设置 null 的默认值适用于 String 变量。但是,对于 Set 变量,它不会。
所以,这行得通(varStr 为空):
@Value("${var.string:#{NULL}}")
private String varStr;
虽然没有(varSet 现在包含一个带有“#{NULL}”的元素):
@Value("#{'${var.set:#{NULL}}'.split(',')}")
private Set<String> varSet;
问题是如何使用 Set 变量进行这项工作,以便默认情况下将其设置为 null。
我们将不胜感激。
【问题讨论】:
-
想要将这样的注入依赖默认设置为
null,这似乎非常奇怪。 -
虽然我同意这是一种非常奇怪的愿望,但我想知道你为什么要把这个表达式放在引号中,即
'${var.set:#{NULL}}'? -
我个人从不使用Field注入,一直使用Constructor注入。通过这种方式,如果您确实需要,您可以控制在构造函数中将字段值设置为
null。 -
外部 var.set 属性是可选属性(并不总是设置)。因此,如果未定义,我们需要将 varSet 对象默认为 null。只是业务需求。