2013-11-04 53 views
2

我有一个属性文件,其中我想修改某些性质为包括用户ID(以及可能的其它运行时加载的值),像下面...可更换的占位符文件

emailer.queuename=Emailer.${user} 

...使物业价值可能会成为,在这个例子中,在读Emailer.SMITHJ

我想扩展Properties类并覆盖getProperty method的,但我也需要确保春季会相应时修改属性上下文使用PropertyPlaceholderConfigurer(我看到我可以覆盖这个类中的convertPropertyValue)。

但有整齐的,我一举两得的办法吗?

感谢

==================================

UPDATE:

情况下,我已经发现了简单的解决方案,就是使用系统属性(如$ {user.name}),并自该PropertyPlaceholderConfigurersystemPropertiesMode设置为fallback Spring会自动排序。但是,我仍然需要为直接使用属性文件的情况创建继承类,或者仅将值注入到它所使用的类中。

回答

0

如果我理解正确的话,你希望在属性文件来代替某些特性,因为它们是用来解决bean的配置属性之前。

正如你所说,bean的属性被PropertyPlaceholderConfigurer这是一个BeanFactoryPostProcessor解决。要执行前期处理,您还需要一个BeanFactoryPostProcessor并实施Ordered接口来指定它何时运行。

,如果您注册或者你BeanFactoryPostProcessor小号编程,他们将在注册的顺序和前执行任何其他bean的通过其他方式注册。