一尘不染

Java 具有多个不同类加载器的Singleton类

java

例如我有Singleton静态字段的类instance

public class Singleton {

    private static Singleton instance;

    // other code, construct, getters, no matter    
}

我可以使用两个不同的类加载器两次加载该类。我该如何避免呢?这是不安全和危险的。

另外,如果我将instance设置为null,那么是否将两个类的instance都设置为null?

Singleton singleton = Singleton.getInstance();
singleton = null;

阅读 261

收藏
2020-03-22

共1个答案

一尘不染

如果你希望Singleton跨类加载器为true ,则需要一个公共父类来加载所讨论的类,或者你需要自己指定类加载器。

更新:来自@Pshemo的评论下面的博客中相当一部分内容可能直接来自JavaWorld Article。我将博客条目保留在其中,因为它可能仍然可以帮助某人,但是值得知道该内容最初来自何处。

原文: 有一个博客条目为你提供了一种执行此操作的方法”(尽管我还没有尝试过!),而且看起来相当合理

按照下面的要求,我在上面的链接中提供了一个代码段-我建议你尽管访问全文,但还是请访问该博客:

private static Class getClass(String classname) throws ClassNotFoundException {
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    if(classLoader == null) 
        classLoader = Singleton.class.getClassLoader();
      return (classLoader.loadClass(classname));
}
2020-03-22