J'ai une classe qui ressemble à ceci:printemps injection statique (global) singleton
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
}
Il sert un objet de configuration globale qui peut être réglé au démarrage de l'application, puis est utilisé par des dizaines de classes tout au long du projet:
// 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
}
}
j'importe maintenant ce code dans un projet de printemps, et essaie de configurer mon XML Sprinig (haricots). Je suppose que je pourrais définir un haricot Configurator
seul comme si (ou quelque chose de similaire):
<bean id="configurator" class="com.me.myapp.Configurator" scope="singleton">
<property name="maxRange" value="30"/>
<!-- etc., for all properties -->
</bean>
De cette façon, quand WidgetFactory#doSomething
exécute, le printemps sera déjà chargé la classe Configurator
et configurée à l'avance.
Est-il exact pour moi de régler l'scope="singleton"
, ou ce ne est pas grave? Est-ce que je règle les propriétés statiques correctement? Y a-t-il autre chose que je dois faire ou considérer ici? Merci d'avance.
Merci @partlov (+1) - aurais-je besoin de rendre publique ma méthode 'getInstance()', ou Spring peut-il gérer le fait qu'elle soit privée? –
Vous n'en avez pas besoin (getInstance()) –