Java 服务加载了服务加载器,使用服务加载器加载自己的服务



我的结构由一个主应用程序组成,该应用程序使用 Java util 服务加载器加载插件。加载服务提供程序 JAR 后,主应用程序的服务提供程序会尝试加载自己的服务提供程序。但是,它们无法完成此操作,因为类装入器上下文是主应用程序的上下文。这意味着类加载器不知道尝试加载自己的服务提供程序所使用的接口,从而导致找不到类异常。任何人都可以建议我的服务提供商如何使用服务加载器加载自己的服务提供商吗?有没有办法在运行时动态更改类装入器上下文?我稍后会尝试发布一些代码。我目前不在代码所在的笔记本电脑上。谢谢。

我假设你使用ServiceLoader.load(Class service)来加载插件?如果是,它使用当前线程的类加载器(Thread.currentThread().getContextClassLoader())。

因此,请尝试使用此方法的重载版本,您可以在其中注入不同的类加载器:

ServiceLoader<S> load(Class<S> service, ClassLoader loader)

好吧,我使用上面提到的重载方法让它工作。唯一的区别是我使用了load(Class service,Plugin.class.getClassLoader() );。Thread.currentThread().getContextClassLoader() 仍然返回主应用程序的类加载器

最新更新