У меня есть класс, который выглядит так:
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
}
Он служит в качестве глобального объекта конфигурации, который может быть установлен при запуске приложения, а затем используется десятками классов по всему проекту:
// 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
}
}
Теперь я импортирую этот код в проект Spring и пытаюсь настроить свой Sprinig XML (beans). Я предполагаю, что я мог бы определить одиночный Configurator
bean так (или что-то подобное):
<bean id="configurator" class="com.me.myapp.Configurator" scope="singleton">
<property name="maxRange" value="30"/>
<!-- etc., for all properties -->
</bean>
Таким образом, когда WidgetFactory#doSomething
выполняется, Spring уже загрузил класс Configurator
и настроил его раньше времени.
Правильно ли мне установить scope="singleton"
, или это не имеет значения? Правильно ли устанавливаю статические свойства? Есть ли что-нибудь еще, что мне нужно сделать или рассмотреть здесь? Спасибо заранее.