Java 如何从JSP创建和引用单例对象?
如何创建用于多种用途的单例类Java 如何从JSP创建和引用单例对象?,java,design-patterns,jsp,Java,Design Patterns,Jsp,如何创建用于多种用途的单例类 以及如何使用该单例类连接到jsp我不确定您为什么要直接从jsp连接到单例。如果您想访问实用程序函数,我将使用JSTL函数: <function> <name>decodeBase64</name> <function-class>nl.wikiwijs.web.portal.Base64Util</function-class> <function-signature>j
以及如何使用该单例类连接到jsp我不确定您为什么要直接从jsp连接到单例。如果您想访问实用程序函数,我将使用JSTL函数:
<function>
<name>decodeBase64</name>
<function-class>nl.wikiwijs.web.portal.Base64Util</function-class>
<function-signature>java.lang.String stringDecodeBase64(java.lang.String)</function-signature>
</function>
如果单例将用于检索数据或公开业务逻辑,我会根据您的体系结构将其移回控制器/操作/组件。如果您计划在Java EE应用程序中使用单例模式,请查看。它将为进一步的研究提供一些重要的见解和链接
正如p3t0r所述,直接从JSP中使用服务在体系结构上是不合理的。尝试使用某种MVC框架来分离关注点,例如,与容器结合使用,也可以使您不必使用自己的单例实现。基本单例设计模式没有什么特殊特征: 无构造函数:确保默认构造函数是私有的 创建一个静态函数,该函数在对象尚未实例化时调用私有构造函数 有一个静态实例变量,它是它自己的类的类型。 简单单例类实现的一个示例是:
public class SingletonClass {
private static SingletonInstance si;
private SingletonClass() {
}
public static synchronized SingletonClass getSingletonInstace() {
if (si == null)
return new SingletonClass();
return si;
}
}
要连接到jsp,可以使用p3t0r的答案 对于singleton,您将使用一个懒惰的私有静态类singleton来保证线程安全*:
public class SingletonClass {
private static class LazySingletonInitializer {
static SingletonClass instance = new SingletonClass();
}
private SingletonClass(){}
public SingletonClass getInstance() {
return LazySingletonInitializer.instance;
}
}
*因为jvm保证一个类的静态成员只由一个线程初始化。单例是一个类,但您使用复数类。你需要详细说明你真正的意思和需要实现的目标,以及为什么你认为你需要单身。
public class SingletonClass {
private static class LazySingletonInitializer {
static SingletonClass instance = new SingletonClass();
}
private SingletonClass(){}
public SingletonClass getInstance() {
return LazySingletonInitializer.instance;
}
}