java.util.ServiceLoader可以在不重启的情况下找到添加到类路径的新jar吗?

时间:2018-05-02 03:24:57

标签: serviceloader

我有一个java应用程序,它实现为使用java.util.serviceLoader查找接口的提供者。当我在运行时将新的提供者jar添加到应用程序的类路径时,应用程序找不到它。如果我重新启动应用程序,应用程序将找到提供者jar。 java应用程序是否有任何选项可以在运行时找到提供程序jar,因为我认为这是java serviceLoader应该执行的操作。

我按照本页中的说明操作。 http://cr.openjdk.java.net/~mr/jigsaw/spec/api/java/util/ServiceLoader.html 在类路径上部署服务提供者

1 个答案:

答案 0 :(得分:0)

说明可以在Creating Extensible Applications(在本教程的结尾)中找到:

  

ServiceLoader API的限制   ServiceLoader API很有用,但有局限性。例如,不可能从ServiceLoader类派生一个类,因此您不能修改其行为。您可以使用自定义ClassLoader子类来更改类的查找方式,但是ServiceLoader本身不能扩展。另外,当前的ServiceLoader类无法在运行时提供新的提供程序时告诉您的应用程序。此外,您无法将更改侦听器添加到加载器,以查明是否将新的提供者放置在特定于应用程序的扩展目录中。

似乎适用于Java8。不知道在以后的版本中是否已更改。