Spring Property Placeholder读取的属性是否立即可用?

时间:2011-03-09 23:20:09

标签: java spring

我正在修改在应用程序上下文文件中使用Spring PropertyPlaceholderConfigurer的代码。在应用程序中成功读取和使用这些属性。但是,如果我使用<import resource="classpath:/my/class/path/${my.file.name}" />跟随PropertyPlaceholderConfigurer声明,则会引发“Could not resolve placeholder 'my.file.name'”错误并引发一系列异常。在声明PropertyPlaceholderConfigurer后,属性是否立即可用?如果没有,它们何时可用?

2 个答案:

答案 0 :(得分:5)

在PropertyPlaceHolderConfigurer(BeanFactoryPostProcessor)解析属性占位符之前解析导入资源。您必须将已解析的资源名称放入导入中。

由于PropertyPlaceHolderConfigurer是BeanFactoryPostProcessor,因此在从Spring配置文件加载bean定义后调用它。

答案 1 :(得分:3)

在弹簧上下文文件上进行了多次传递,因此问题是可用属性的传递。不幸的是,<import>标签在早期的传递上处理而不是bean声明(例如你的PropertyPlaceholderConfigurer),因此它不会以你尝试使用它的方式提供。 / p>

您(可能)尝试做的事情在Spring中很常见,有许多不同的解决方案。它们通常涉及修改构建以进行注射。谷歌搜索/堆栈溢出为每个环境弹簧配置应该出现一些东西。我读过Spring 3.1将提供一个允许每个环境配置的工具(所以如果我正在进行“测试”构建,请使用“this”属性文件,如果我正在进行“dev”构建,请使用此文件。) ,但此时我对此知之甚少。