如果我在Struts动作中实例化一个Singleton类,那么它会持续发出其他请求吗?
我的意思是,如果我使用的是Struts动作代码并且我写了:
Singleton object = Singleton.getInstance();
当另一个用户激活需要该对象的相同或另一个动作时,该对象是否存在?
答案 0 :(得分:0)
正确实现的Singleton
将在应用程序的上下文中构建一次,一旦创建,将在JVM中重用。 Singleton pattern维基百科页面(部分)说明
在软件工程中,单例模式是一种设计模式,它将类的实例化限制为一个对象。当需要一个对象来协调整个系统的操作时,这非常有用。
是。 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
注射。