如何在不同的类加载器中创建不同的单例实例?

时间:2014-07-09 16:11:36

标签: java singleton classloader

我有一个使用ClassLoader层次结构来运行插件的应用程序。我们在“服务器”级别有一个父类ClassLoader,然后在每个插件中有一个子类ClassLoader。每个插件都可以访问一些专用于该插件的服务,我想通过单例提供访问。

public class PluginServices {
    private static PluginServices _instance = null;
    private PluginServices() {
    }
    public static PluginServices getInstance() {
        if (_instance == null) {
            _instance = new PluginServices();
        }
        return _instance;
    }

    public static Service1 getService1() { ... }        
    public static Service2 getService2() { ... }        

}

但是,当我从插件中访问单例时,我总是得到相同的实例而不是每个插件的新实例。看起来这种情况正在发生,因为PluginServices的.class位于由Parent ClassLoader加载的JAR中,因此该实例与该ClassLoader而不是我的插件ClassLoader相关联。

有没有什么方法可以将PluginServices Singleton实例绑定到插件的ClassLoader上,因此每个插件都会获得自己的实例?

0 个答案:

没有答案