我有一个属性文件,我想在其中修改某些属性以包含用户 ID(以及可能的其他运行时加载的值),如下所示...
emailer.queuename=Emailer.${user}
...在本例中,属性值可能变为 Emailer.SMITHJ
当读入时。
我想延长 Properties
类并覆盖 getProperty method
,但我还需要确保 Spring 在使用 PropertyPlaceholderConfigurer
时会相应地修改属性对于上下文(我发现我可以在此类中覆盖convertPropertyValue
)。
但是有没有一种巧妙的方法可以同时实现这两个目标?
谢谢
====================================
更新:
在我发现的我的案例中,简单的解决方案就是使用系统属性(例如 ${user.name}),并且因为 systemPropertiesMode
对于PropertyPlaceholderConfigurer
类设置为 fallback
Spring会自动对其进行排序。但是,对于直接使用属性文件的情况,我仍然需要创建一个继承类,或者只是将值注入(inject)到使用它的类中。
最佳答案
如果我理解正确的话,您希望在属性文件中的某些属性用于解析 bean 配置中的属性之前替换它们。
正如您所说,bean 属性由 PropertyPlaceholderConfigurer
解析,它是一个 BeanFactoryPostProcessor
。要执行前期处理,您还需要一个 BeanFactoryPostProcessor 并实现 Ordered 接口(interface)来指定它何时运行。
或者,如果您以编程方式注册 BeanFactoryPostProcessor
,它们将按照注册的顺序执行,并且在通过其他方式注册任何其他 bean 之前执行。
关于java - 属性文件中的可替换占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19767821/