Mam klasy, który wygląda tak:Wiosna wstrzykiwanie statycznym (globalne) 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
}
Służy jako obiekt konfiguracji globalnej, który można ustawić na app uruchamiania, a następnie jest wykorzystywany przez dziesiątki klas w całym projekcie:
// 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
}
}
Teraz importuję ten kod do projektu wiosennego i próbuję skonfigurować mój Sprinig XML (komponenty bean). Domyślam się, że mogę określić samotnego Configurator
podobnie jak fasola (lub coś podobnego):
<bean id="configurator" class="com.me.myapp.Configurator" scope="singleton">
<property name="maxRange" value="30"/>
<!-- etc., for all properties -->
</bean>
ten sposób, kiedy WidgetFactory#doSomething
Wykonuje, wiosna będzie już załadowany klasę Configurator
i ustawił go przed czasem.
Czy to jest właściwe dla mnie ustawić scope="singleton"
, czy to nie ma znaczenia? Czy prawidłowo ustawiam właściwości statyczne? Czy jest coś jeszcze, co muszę zrobić lub rozważyć tutaj? Z góry dziękuję.
Dzięki @partlov (+1) - czy muszę podać publicznie moją metodę 'getInstance()', czy też Spring może poradzić sobie z faktem, że jest ona prywatna? –
Nie potrzebujesz tego (getInstance()) –