Java 如何在不同的类装入器中创建不同的单例实例?
我有一个应用程序,它使用类加载器层次结构来运行插件。我们在服务器级别有一个父类加载器,然后每个插件都有子类加载器。每个插件都可以访问几个专门用于该插件的服务,我想通过一个单例提供访问Java 如何在不同的类装入器中创建不同的单例实例?,java,singleton,classloader,Java,Singleton,Classloader,我有一个应用程序,它使用类加载器层次结构来运行插件。我们在服务器级别有一个父类加载器,然后每个插件都有子类加载器。每个插件都可以访问几个专门用于该插件的服务,我想通过一个单例提供访问 public class PluginServices { private static PluginServices _instance = null; private PluginServices() { } public static PluginServices getIns
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位于父类加载器加载的JAR中,因此实例绑定到该类加载器而不是我的插件类加载器
是否有任何方法可以将PluginServices单例实例绑定到插件的类加载器,从而每个插件都有自己的实例?您必须在类加载器中找到单例类,并使用newInstance创建一个实例。但是,当然,这有点否定了这一切的单一性。或者您可以找到类,然后使用反射来访问singleton访问方法-可能更好一些。这就是singleton的点,确保它只有一个实例。当然,您需要创建singleton来包含指向您创建的singleton的指针。