Сохранится ли созданный в распорках синглтон?

Если я создам экземпляр класса 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 является формой глобальной переменной, и, таким образом, всем пользователям будет доступен только один экземпляр.

Другие вопросы по тегам