在 struts 操作中创建的单例是否会持续存在?
Will a singleton created in struts action persist?
如果我在 Struts 操作中实例化一个单例 class,它是否会持续用于启动该操作的其他请求?
我的意思是,如果我在 Struts 操作代码中并且我写:
Singleton object = Singleton.getInstance();
当另一个用户启动需要该对象的相同或另一个操作时,该对象是否存在?
一个"Single"实例
正确实现的 Singleton
将在您的应用程序上下文中构建一次,一旦创建,将在 JVM 中重复使用。 Singleton pattern 维基百科页面说(部分),
In software engineering, the singleton pattern is a design pattern that restricts the instantiation of a class to one object. This is useful when exactly one object is needed to coordinate actions across the system.
tl;博士
是的。 Singleton
是全局变量的一种形式,因此所有用户只会共享一个实例。
我理解你的疑问:
因为 Struts2 操作是 ThreadLocal
,因此每个操作根据每个请求创建其对象的一个实例,单身人士的行为是否正确?
从你的代码看来你指的是 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
"wins" 超过 ThreadLocal
,并使其 唯一 (实例化一次,然后共享)。
*请注意,如果您使用 Java EE >= 6,有许多方法可以比这更好地处理单例,例如 CDI、EJB3 等...例如 @Singleton
EJB 或@Singleton
次注射。
如果我在 Struts 操作中实例化一个单例 class,它是否会持续用于启动该操作的其他请求?
我的意思是,如果我在 Struts 操作代码中并且我写:
Singleton object = Singleton.getInstance();
当另一个用户启动需要该对象的相同或另一个操作时,该对象是否存在?
一个"Single"实例
正确实现的 Singleton
将在您的应用程序上下文中构建一次,一旦创建,将在 JVM 中重复使用。 Singleton pattern 维基百科页面说(部分),
In software engineering, the singleton pattern is a design pattern that restricts the instantiation of a class to one object. This is useful when exactly one object is needed to coordinate actions across the system.
tl;博士
是的。 Singleton
是全局变量的一种形式,因此所有用户只会共享一个实例。
我理解你的疑问:
因为 Struts2 操作是 ThreadLocal
,因此每个操作根据每个请求创建其对象的一个实例,单身人士的行为是否正确?
从你的代码看来你指的是 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
"wins" 超过 ThreadLocal
,并使其 唯一 (实例化一次,然后共享)。
*请注意,如果您使用 Java EE >= 6,有许多方法可以比这更好地处理单例,例如 CDI、EJB3 等...例如 @Singleton
EJB 或@Singleton
次注射。