子上下文中的@Value注释

时间:2014-05-07 19:58:39

标签: spring properties

我认为使用@Value注释和默认值时存在一些问题。我在变量上使用以下注释。我希望看到变量propAVar设置为propA的属性值但是,它总是设置为默认值-10

@Component
public class SomeClass {

@Value("${propA:-10}")
public String propAVar;

}

我在父和子上下文中使用PropertyPlaceholderConfigurer。子上下文具有上下文:component-scan元素,用于扫描SomeClass。在深入挖掘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将遍历所有embeddedValueResolvers并确定该属性的值。但是,如果我们定义一个默认值,它将在第一个embeddedValueResolvers中查找该属性,如果在那里找不到它,则返回默认值。它不应该通过所有解析器然后返回默认值吗?想提一下,没有默认值,这样可以正常工作。

如果有人可以帮助解释@Value的预期行为以及父子情境的默认值,那将会很棒。

[在spring forum]

上交叉发布

1 个答案:

答案 0 :(得分:0)

我相信你看到了this bug。其他用户在其中提到了一些解决方法。此外,我建议投票修理它,以防你的情况与那里描述的相同。