Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从JSP创建和引用单例对象?_Java_Design Patterns_Jsp - Fatal编程技术网

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;
    }
}