【发布时间】:2010-10-27 04:03:49
【问题描述】:
我正在开发一个没有注释的 Spring 2.0 项目。我们使用几个带有不同前缀和后缀的 PropertyPlaceholderConfigurer bean 来从不同的属性文件加载属性。这很好用。
由于大量的属性文件和属性,我希望应用程序列出未使用的属性。这意味着,在属性文件中配置的属性,但从未在 Spring 应用程序上下文中引用。
我编写了一个实现 BeanFactoryPostProcessor 的 bean,并做了一些技巧来在应用程序上下文中找到对不同 PropertyPlaceHolderConfigurers 的引用。这给了我一个使用的属性列表。
但是,我无法访问 PlaceHolderConfigurers 加载的属性。因此,我无法显示未使用的属性。
是否有一种(简单的)方法可以获取 PropertyPlaceholderConfigurer 的属性?有关如何解决此问题的任何其他建议?
编辑:解决方案是访问 mergeProperties 方法,如下所示:
PropertyPlaceholderConfigurer ppc =
(PropertyPlaceholderConfigurer) applicationContext.getBean("yourBeanId");
Method m = PropertiesLoaderSupport.class.getDeclaredMethod("mergeProperties",
new Class[] {});
m.setAccessible(true);
Properties loadedProperties = (Properties) m.invoke(propertyPlaceHolder, null);
在获得最初加载的属性,并在 BeanFactoryPostProcessing 期间获取 beandefinitions 之后,剩下的就很简单了。减去这两个集合,瞧:我们现在可以列出未使用的属性。
【问题讨论】: