首页 > 解决方案 > 在类路径代码中有实现以在库中使用

问题描述

我正在尝试编写一个实用程序库(jar),

图书馆内

interface ConfigBuilder
{
  public Configuration buildConfiguration()
}

class SomeLogic
{
  private void someMethod()
  {
    ConfigBuilder  builder = // GET IMPLEMETATION OBJECT FROM IMPLEMENTOR OF LIBRARY ??
    Configuration c = builder.buildConfiguration();
    method2(c)
    //Some logic
  }
}

我怎样才能做到这一点 ??我使用 Gradle 作为构建工具。作为库我们没有实现类。我们能做的最大的事情是——谁实现了这个库,创建一个有名字的类com.xyz.lib.implimentation.ConfigBuilderImpl

实现ConfigBuilder接口

我尝试 的是

this.getClass.getClassLoader.loadClass("com.xyz.lib.implimentation.ConfigBuilderImpl")

然后我得到异常

java.lang.ClassNotFoundException: com.xyz.lib.implimentation.ConfigBuilderImpl
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

标签: javascalareflectionscala-reflect

解决方案


您可以使用 SPI,即服务提供者接口。

https://docs.oracle.com/javase/tutorial/ext/basics/spi.html


推荐阅读