假设我在 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/