2014-05-07 24 views
0

我認爲在使用@Value註解和默認值時會出現一些問題。我在變量上使用以下注釋。我希望看到的變量propAVar但是與propA的屬性值設置,它始終設置爲默認值-10@兒童上下文中的值註釋

@Component 
public class SomeClass { 

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

} 

我的父母和孩子環境中使用PropertyPlaceholderConfigurer。子上下文具有上下文:掃描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]

回答

0

[交叉貼我相信你所看到this bug。那裏有其他用戶提到的一些解決方法。另外,如果您的情況與此處描述的情況相同,我會建議投票修復它。