Сохранится ли созданный в распорках синглтон?
Если я создам экземпляр класса Singleton в действии Struts, будет ли он постоянным для другого запроса, запускающего это действие?
Я имею в виду, если я в коде действия Struts и пишу:
Singleton object = Singleton.getInstance();
будет ли объект существовать, когда другой пользователь запустит то же самое или другое действие, требующее этого объекта?
2 ответа
Я понимаю ваши сомнения:
так как Struts2 действия ThreadLocal
и, следовательно, каждое действие при каждом запросе создает экземпляр своего объекта, будет ли Singleton вести себя правильно?
Из вашего кода кажется, что вы имеете в виду pre-1.5 * Singleton:
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
Ответ да:
приватный статический финал Singleton INSTANCE = new Singleton();
поскольку static
"выигрывает" ThreadLocal
и делает его уникальным (создается один раз, затем разделяется).
* Обратите внимание, что если вы используете Java EE >= 6, есть много способов лучше обрабатывать синглтоны, с помощью CDI, EJB3 и т. Д., Например: @Singleton
EJB или @Singleton
инъекции.
"Единый" экземпляр
Правильно реализованный Singleton
будет создан один раз в контексте вашего приложения, а после создания будет использоваться повторно в JVM. На странице Википедии, посвященной шаблону Singleton, говорится (частично)
В разработке программного обеспечения шаблон синглтона - это шаблон проекта, который ограничивает создание экземпляра класса одним объектом. Это полезно, когда ровно один объект необходим для координации действий в системе.
ТЛ; др
Да. Singleton
является формой глобальной переменной, и, таким образом, всем пользователям будет доступен только один экземпляр.