ho una classe che assomiglia così:Primavera iniezione di una statica Singleton (globale)
public class Configurator {
private static Configurator INSTANCE = null;
private int maxRange = 1;
// many other properties; each property has a default value
private static synchronized Configurator getInstance() {
if(INSTANCE == null)
return new Configurator();
return INSTANCE;
}
public static int getMaxRange() {
getInstance().maxRange;
}
public static void setMaxRange(int range) {
getInstance().maxRange = range;
}
// Getters and setters for all properties follow this pattern
}
Serve come un oggetto di configurazione globale che può essere impostata all'avvio app, e poi viene utilizzato da decine di classi tutto il progetto:
// Called at app startup to configure everything
public class AppRunner {
Configurator.setMaxRange(30);
}
// Example of Configurator being used by another class
public class WidgetFactory {
public void doSomething() {
if(Configurator.getMaxRange() < 50)
// do A
else
// do B
}
}
ora sto importando questo codice in un progetto di primavera, e sto cercando di configurare il mio XML Sprinig (fagioli). La mia ipotesi è che potrei definire un solitario Configurator
fagiolo in questo modo (o qualcosa di simile):
<bean id="configurator" class="com.me.myapp.Configurator" scope="singleton">
<property name="maxRange" value="30"/>
<!-- etc., for all properties -->
</bean>
questo modo, quando WidgetFactory#doSomething
esegue, Primavera avranno già caricato la classe Configurator
e configurato prima del tempo.
È corretto impostare scope="singleton"
o non importa? Sto impostando correttamente le proprietà statiche? C'è qualcos'altro che devo fare o considerare qui? Grazie in anticipo.
Grazie @partlov (+1) - avrei bisogno di rendere pubblico il mio metodo 'getInstance()', oppure Spring può gestire il fatto che è privato? –
Non ne hai bisogno (getInstance()) –