2009-05-18 6 views
6

Ich arbeite an einem Spring 2.0-Projekt, ohne Anmerkungen. Wir verwenden mehrere PropertyPlaceholderConfigurer-Beans mit unterschiedlichen Vor- und Suffixen zum Laden von Eigenschaften aus verschiedenen Eigenschaftendateien. Das funktioniert wunderbar.So erkennen Sie nicht verwendete Eigenschaften in Spring

Aufgrund der großen Anzahl von Eigenschaftendateien und -eigenschaften wollte ich, dass die Anwendung die Eigenschaften auflistet, die nicht verwendet sind. Das bedeutet, Eigenschaften, die in einer Eigenschaftendatei konfiguriert sind, aber nie im Spring-Anwendungskontext referenziert werden.

Ich schrieb eine Bean, die BeanFactoryPostProcessor implementiert, und machte einige Tricks, um Verweise im Anwendungskontext auf die verschiedenen PropertyPlaceHolderConfigurers zu finden. Dies gibt mir eine Liste der Eigenschaften, die verwendet werden.

Allerdings kann ich nicht zu den Eigenschaften gelangen, die von den PlaceHolderConfigurers geladen wurden. Aus diesem Grund kann ich die Eigenschaften, die NICHT verwendet werden, nicht anzeigen.

Gibt es einen (einfachen) Weg, um zu den Eigenschaften eines PropertyPlaceholderConfigurer zu gelangen? Irgendwelche anderen Vorschläge, wie man dieses Problem löst?

bearbeiten: Die Lösung wurde die mergeProperties metod Zugriff, etwa so:

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

Nachdem die ursprünglich geladenen Eigenschaften bekommen, und Holen der beandefinitions während des BeanFactoryPostProcessing, der Rest war einfach. Subtrahieren Sie die beiden Sammlungen und voila: Wir können nun die nicht verwendeten Eigenschaften auflisten.

Antwort

3

Sie können versuchen, die geschützte Methode mergeProperties mit Reflektion zu verwenden, um die vollständige Liste der Eigenschaften zu erhalten, und dann, wie andere Poster bereits gesagt haben, entfernen Sie alle Eigenschaften, die tatsächlich verwendet werden, um mit dem Satz von unbenutzt zu enden Eigenschaften.

Wahrscheinlich ein wenig zu hackig für den Produktionscode, aber ich nehme an, Sie würden dies nur in einer Unit-Test-Einstellung ausführen, um diesen Bericht zu generieren.

1

Wie wäre es mit dem Erstellen einer eigenen Unterklasse von PropertyPlaceholderConfigurer, die einen Verweis auf ihr Objekt Eigenschaften behalten und einen Accessor bereitstellen würde. Ihr BeanFactoryPostProcessor wäre dann in der Lage, auf jedes ursprüngliche Properties-Objekt zuzugreifen und kombiniert mit der Liste der Eigenschaften, die verwendet werden, könnten Sie die Eigenschaften herausfinden, die nicht verwendet wurden.

+0

Das würde erfordern, dass alle PropertyPlaceHolderConfigurers bearbeitet werden, was möglich ist, aber ich möchte das nicht tun. Durch Verwendung der obigen Lösung kann ich auch fehlende Eigenschaften in neuen PropertyPlaceHolderConfigurers erkennen, die von "dem neuen Typ" hinzugefügt werden :-) – Rolf

0

Konnte man nicht einfach über die Liste der verwendeten Eigenschaften iterieren und sie aus einer doppelten Menge aller Eigenschaften entfernen? Das würde die unbenutzten zurücklassen.

+0

Es gibt keinen Getter für die verwendeten Eigenschaften und keinen Getter für alle Eigenschaften. – Rolf

Verwandte Themen