2009-05-18 2 views
6

Я работаю над проектом Spring 2.0 без аннотаций. Мы используем несколько компонентов PropertyPlaceholderConfigurer с различными пре-и суффиксами для загрузки свойств из разных файлов свойств. Это прекрасно работает.Как обнаружить неиспользуемые свойства весной

Из-за большого количества файлов свойств и свойств я хотел, чтобы приложение отображало свойства, которые не используется. Это означает, что свойства, которые настроены в файле свойств, но никогда не упоминаются в контексте приложения Spring.

Я написал bean-компонент, который реализует BeanFactoryPostProcessor, и сделал некоторые обманы, чтобы найти ссылки в контексте приложения для разных PropertyPlaceHolderConfigurers. Это дает мне список свойств, которые используются.

Однако я не могу добраться до свойств, которые были загружены PlaceHolderConfigurers. Из-за этого я не могу показать свойства, которые НЕ используются.

Есть ли (простой) способ доступа к свойствам PropertyPlaceholderConfigurer? Любые другие предложения по решению этой проблемы?

Редактировать: Раствор доступа к mergeProperties Metod, например, так:

PropertyPlaceholderConfigurer ppc = 
    (PropertyPlaceholderConfigurer) applicationContext.getBean("yourBeanId"); 
Method m = PropertiesLoaderSupport.class.getDeclaredMethod("mergeProperties", 
      new Class[] {}); 
m.setAccessible(true); 
Properties loadedProperties = (Properties) m.invoke(propertyPlaceHolder, null); 

После получения первоначально загруженные свойства, и извлечение в beandefinitions во время BeanFactoryPostProcessing, остальное было просто. Вычтите две коллекции и вуаля: теперь мы можем перечислить неиспользуемые свойства.

ответ

3

Вы можете попробовать позвонить защищенному методу mergeProperties, используя отражение, чтобы получить полный список свойств, а затем, как уже отмечали другие плакаты, удалите все свойства, которые фактически используются для завершения набора неиспользуемых свойства.

Возможно, это слишком хакерский код для производственного кода, но я предполагаю, что вы будете запускать это только в настройке единицы измерения для создания этого отчета.

1

Как создать собственный подкласс PropertyPlaceholderConfigurer, который сохранит ссылку на свой объект Properties и предоставит аксессуар. Затем ваш BeanFactoryPostProcessor сможет получить доступ к каждому исходному объекту «Свойства» и в сочетании со списком свойств, которые используются, вы можете определить свойства, которые не были использованы.

+0

Это потребует редактирования всех свойств PropertyPlaceHolderConfigurers, что возможно, но я не хочу этого делать. Используя вышеприведенное решение, я также могу обнаружить недостающие свойства в новых PropertyPlaceHolderConfigurers, которые добавляются «новым парнем» :-) – Rolf

0

Не могли бы вы просто перебрать список используемых свойств и удалить их из дублированного набора всех свойств? Это оставило бы неиспользованных.

+0

Не используется getter для использованных свойств и нет геттера для всех свойств. – Rolf

Смежные вопросы