2

如果我在 Struts 动作中实例化一个 Singleton 类,它对于其他请求触发该动作是否会持续存在?

我的意思是,如果我在一个 Struts 动作代码中并且我写:

Singleton object = Singleton.getInstance();

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

4

2 回答 2

0

“单一”实例

一个正确实现Singleton的将在您的应用程序的上下文中构建一次,并且一旦创建将在 JVM 中重新使用。单例模式维基百科页面(部分)说,

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

tl;博士

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

于 2015-07-07T00:58:12.567 回答
0

我明白你的疑问:

由于 Struts2 Actions 是ThreadLocal,因此每个动作,在每个请求上,都会创建其对象的一个​​实例,单例行为是否正确

从您的代码看来,您指的是pre-1.5* Singleton

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

    private Singleton() {}

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

答案是肯定的:

私有静态最终单例实例=新单例();

因为static“赢得”了ThreadLocal,并使其独一无二(实例化一次,然后共享)。


*请注意,如果您使用的是 Java EE >= 6,则有很多方法可以比这更好地处理单例,使用 CDI、EJB3 等……例如@SingletonEJB 或@Singleton注入。

于 2015-07-07T08:14:17.850 回答