2007. január 21., vasárnap

Spring context és a java.util.Properties osztály érdekességei

Ez a probléma mindig előjön amikor spring contextekben java.util.Properties objektumot kell passzolni valamelyik objektumnak. A probléma az az, hogy a spring ilyan Properties objektumokat csinál:

Na és ez piszok mód statikus. Ebbe a properties-be senki nem szól bele. Többnyire ez nem baj, csak vegyük példának egy olyan esetet, hogy van egy hibernate-re épülő szoftverünk, amihez külön kontextusba kipakoltuk a hibernate különböző beállításait és az DataSource konfigot. Ebben az esetben azt szeretném, ha abban a külső XML-ben legyenek definiálva egyes tulajdonságok. Például a hibernate.dialect.
És akkor jön a gonosz Copy-Past Coding, mert ezt minden springes projectben ahol felmerül ennek az igénye ezt beletúrom.

public class PropertiesFactory implements FactoryBean {

private Map properties;

public Object getObject() throws Exception {
Properties props = new Properties();
props.putAll(properties);
return props;
}

public Class getObjectType() {
return Properties.class;
}

public boolean isSingleton() {
return true;
}

public Map getProperties() {
return properties;
}

public void setProperties(Map properties) {
this.properties = properties;
}

}
És innentől már lehet Map-ból csináni a Properties-t ezzel a factory bean-nel.
Na, erre szivesen megnéznék egyszer valami más megoldást :) Is there anybody out there?