我有一个使用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上,因此每个插件都会获得自己的实例?