java - 如何使现有的 Java 类/接口(interface)实现成为单例?

标签 java spring singleton

假设我在 Spring 中使用 ApplicationContext 实现。

ApplicationContext 是 Java Spring 框架中的一个接口(interface),我无法更改它。

如何确保此实现只能有一个实例?

例如。我有以下代码 -

public class ApplicationContextSingleton 
{
     private static ApplicationContext context;
     private static int numberOfInstances = 0;

     public static ApplicationContext getApplicationContext()
     {
         if(numberOfInstances == 0)
         {
             context = new ClassPathXmlApplicationContext("spring.xml");
             numberOfInstances++;
         }
         return context;
     }
}

这样,我可以确保只有一个 ApplicationContext 实例,前提是它是按如下方式获取的 -

ApplicationContext context = ApplicationContextSingleton.getApplicationContext();

但这并不能阻止另一位程序员说 -

ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); 

从而创建一个新的ApplicationContext。如何防止这种情况发生?

最佳答案

您希望使 ApplicationContext 成为单例,因此我将使用自己的自定义类覆盖该类,确保它首先出现在类路径上,并使其具有私有(private)构造函数。

也就是说,如果您决心将其设为单例。正如其他答案和评论所指出的,有更好的方法来解决您的问题。

应该注意,覆盖库的各个部分通常是一个坏主意,因为它可能会在以后引起麻烦,尤其是当您尝试升级框架版本时。

关于java - 如何使现有的 Java 类/接口(interface)实现成为单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11001697/

相关文章:

java - While 循环用户输入

java - Spring Security - 如何列出不同用户的对象

java - 使用 Spring security Javaconfig 进行基本和基于表单的身份验证

java - IntelliJ IDEA生成的Spring Boot项目Artifact导致错误

PHP Static v Singleton 类 - ConnectionFactory 解释

c# - IIS 中托管的 WCF 服务的生命周期

syntax - 需要帮助来了解android.volley.requestQueue文档示例的语法

java - 在 html 文件中发送包含多语言上下文的电子邮件时出现问题

java - 是否可以在 JHipster 应用程序中获取用户的时区?

java - 【Java将unicode从cmd转换为char】