将<property-placeholder>属性公开给Spring Environment </property-placeholder>

时间:2014-01-22 07:56:10

标签: java spring properties-file spring-environment

我有一个属性文件,我正在使用property-placeholder元素通过XML注册Spring:

<context:property-placeholder location="classpath:foo.properties" />

我可以使用@Value注释来访问属性,例如

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

但我还需要通过Spring Environment访问属性,例如

@Autowired
private Environment env;

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

getValue()此处始终返回null,即使对于属性文件中定义的键也是如此,因为使用<property-placeholder>似乎不会向环境公开属性。有没有办法强制通过环境访问以这种方式加载的属性?

1 个答案:

答案 0 :(得分:3)

从Spring 3.2.x reference和简介blog post

  

在Spring 3.1之前,context:property-placeholder命名空间   element注册了PropertyPlaceholderConfigurer的实例。它   如果使用spring-context-3.0.xsd定义,仍然会这样做   命名空间。也就是说,你可以保留注册   PropertyPlaceholderConfigurer通过命名空间,即使使用   春季3.1;只是不要更新您的xsi:schemaLocation并继续   使用3.0 XSD。

所以,我的猜测是你的XML 使用正确的XSD版本。