【问题标题】:@Value annotation in child context子上下文中的@Value 注释
【发布时间】: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


    【解决方案1】:

    我相信你看到的是this bug。那里有其他用户提到的一些解决方法。另外,我建议投票修复它,以防您的情况与那里描述的情况相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-30
      • 2021-06-30
      • 1970-01-01
      • 2022-06-22
      • 1970-01-01
      • 2023-03-30
      • 2012-09-26
      • 2013-08-18
      相关资源
      最近更新 更多