struts动作中创建的单例是否会持续存在?

时间:2015-07-07 00:49:23

标签: java struts2 singleton thread-local struts-action

如果我在Struts动作中实例化一个Singleton类,那么它会持续发出其他请求吗?

我的意思是,如果我使用的是Struts动作代码并且我写了:

Singleton object = Singleton.getInstance();

当另一个用户激活需要该对象的相同或另一个动作时,该对象是否存在?

2 个答案:

答案 0 :(得分:0)

“单一”实例

正确实现的Singleton将在应用程序的上下文中构建一次,一旦创建,将在JVM中重用。 Singleton pattern维基百科页面(部分)说明

  

在软件工程中,单例模式是一种设计模式,它将类的实例化限制为一个对象。当需要一个对象来协调整个系统的操作时,这非常有用。

TL;博士

是。 Singleton是一种全局变量形式,因此所有用户只共享一个实例。

答案 1 :(得分:0)

我怀疑你了:

因为Struts2操作是ThreadLocal ,因此每个请求的每个操作都会创建一个对象的实例,会使Singleton行为正确吗?< / p>

从您的代码中,您似乎指的是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&gt; = 6,有很多方法可以更好地处理Singletons,包括CDI,EJB3等......例如@Singleton EJB或@Singleton注射。