gpt4 book ai didi

java - 在 java.util.Set 变量的 Spring @Value 中将默认值设置为 null

转载 作者:搜寻专家 更新时间:2023-11-01 02:02:47 26 4
gpt4 key购买 nike

使用 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。

非常感谢您的帮助。

最佳答案

您可以尝试将 @Value 注入(inject)数组而不是 Set。然后在 @PostConstruct init block 中将其转换为所需的 Set 实例。当不存在此类属性时,Spring 似乎正在注入(inject)一个空数组(非空)(请注意 @Value 字符串中的空默认值)。当它确实存在时,它默认以逗号分隔。

像这样:

@Value("${some.prop:}")
private String[] propsArr;
private Set<String> props;

@PostConstruct
private void init() throws Exception {
props = (propsArr.length == 0) ? null : Sets.newHashSet(propsArr);
}

我再提一个建议。我建议您根本不要使用 null,而是使用一个空的 Set。 Null 往往容易出错,并且通常不会传达比空集合更多的信息。您的情况可能会有所不同 - 这只是一般性建议。

顺便说一句 - Sets.newHashSet(...) 调用来自 Google's Guava library .强烈推荐。

关于java - 在 java.util.Set 变量的 Spring @Value 中将默认值设置为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41861870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com