【发布时间】:2014-05-07 19:58:39
【问题描述】:
我认为在使用@Value 注解和默认值时会出现一些问题。我在变量上使用以下注释。我希望看到变量 propAVar 设置为 propA 的属性值,但它始终设置为默认值 -10
@Component
public class SomeClass {
@Value("${propA:-10}")
public String propAVar;
}
我在父子上下文中使用 PropertyPlaceholderConfigurer。子上下文具有扫描 SomeClass 的 context:component-scan 元素。在深入研究 Spring 代码时,我发现了可能存在问题的以下方法。
public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport implements ConfigurableBeanFactory {
//...
public String resolveEmbeddedValue(String value) {
String result = value;
for (StringValueResolver resolver : this.embeddedValueResolvers) {
if (result == null) {
return null;
}
result = resolver.resolveStringValue(result);
}
return result;
}
//...
}
看起来 resolveEmbeddedValue 将遍历所有 embeddedValueResolver 并确定该属性的值。但是,如果我们定义一个默认值,它会在第一个 embeddedValueResolvers 中查找该属性,如果在那里找不到则返回默认值。它不应该通过所有解析器然后返回默认值吗?想提一下,没有默认值也可以正常工作。
如果有人可以帮助解释 @Value 在父子上下文的情况下使用默认值的预期行为,那就太好了。
[交叉发布在spring forum]
【问题讨论】:
标签: spring properties