Будет ли сохраняться синглтон, созданный в действии struts?

Если я создам экземпляр класса Singleton в действии Struts, будет ли он постоянным для других запросов, запускающих это действие?

Я имею в виду, если я нахожусь в коде действия Struts и пишу:

Singleton object = Singleton.getInstance();

будет ли объект существовать, когда другой пользователь запускает то же самое или другое действие, требующее этого объекта?


person Carlos DaSilva    schedule 07.07.2015    source источник


Ответы (2)


Я понимаю ваше сомнение:

поскольку действия Struts2 являются ThreadLocal< /strong>, и, следовательно, каждое действие по каждому запросу создает экземпляр своего объекта, будет ли синглтон вести себя правильно?

Судя по вашему коду, вы имеете в виду pre-1.5* Singleton:

public class Singleton {
    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return INSTANCE;
    }
}

Ответ да:

private static final Singleton INSTANCE = new Singleton();

поскольку static "выигрывает" над ThreadLocal и делает его уникальным (экземпляр создается один раз, а затем используется совместно).


*Обратите внимание, что если вы используете Java EE >= 6, есть много способов лучше обрабатывать синглтоны, чем этот, с помощью CDI, EJB3 и т. д., например, @Singleton EJB или @Singleton инъекций.

person Andrea Ligios    schedule 07.07.2015
comment
Идеальный ответ, еще одно сомнение, будет ли этот объект доступен во всем приложении Struts? Я имею в виду, что я смогу использовать его в другом действии, верно? - person Carlos DaSilva; 07.07.2015
comment
Да, это определенно - person Andrea Ligios; 07.07.2015
comment
Большое спасибо, очень ценю вашу помощь! - person Carlos DaSilva; 07.07.2015

«Одиночный» экземпляр

Правильно реализованный Singleton будет создан один раз в контексте вашего приложения, а после создания будет повторно использоваться в JVM. На странице Википедии Singleton говорится (частично),

В программной инженерии шаблон singleton — это шаблон проектирования, который ограничивает создание экземпляра класса одним объектом. Это полезно, когда требуется ровно один объект для координации действий в системе.

tl;dr

да. Singleton — это форма глобальной переменной, поэтому для всех пользователей будет только один экземпляр.

person Elliott Frisch    schedule 07.07.2015