2014-01-22 138 views
3

我有一個屬性文件我正在與Spring通過XML註冊,使用property-placeholder元件:暴露<屬性佔位符>屬性,以春環境

<context:property-placeholder location="classpath:foo.properties" /> 
使用 @Value註釋

我可以訪問的特性,例如

@Value("${prefs.key}") 
private String prefValue; 

但我還需要通過Spring環境訪問屬性,例如,

@Autowired 
private Environment env; 

public String getValue(String key) { 
    return env.getProperty(key); 
} 

getValue()這裏總是返回null,甚至在屬性文件中定義按鍵,因爲它似乎是使用<property-placeholder>不公開屬性的環境。有沒有辦法強制以這種方式加載的屬性可以通過環境訪問?

回答

3

從春天3.2.x中reference和引進blog post

此前春天3.1,該context:property-placeholder命名空間 元素註冊的PropertyPlaceholderConfigurer一個實例。如果使用 命名空間的spring-context-3.0.xsd定義,則它仍然會這樣做。也就是說,即使使用 Spring 3.1,您也可以通過名稱空間保留 PropertyPlaceholderConfigurer的註冊。根本不要更新您的xsi:schemaLocation並使用3.0 XSD繼續 。

所以,我的猜測是你的XML是而不是使用適當的XSD版本。

+0

我目前使用'spring-context-3.0.xsd'作爲XSD - 但奇怪的是,切換到3.1版本的XSD會導致屬性以我期望的方式暴露給環境。 謝謝! – Doches