我尝试使用Java ServiceLoader来查找实现特定接口的所有类,如下所示:
loader = ServiceLoader.load(Operation.class);
try {
for (Operation o : loader) {
operations.add(o);
}
} catch (ServiceConfigurationError e) {
LOGGER.log(Level.SEVERE, "Uncaught exception", e);
}不幸的是,当我在调试模式下运行Eclipse时,ServiceLoader找不到任何类。我觉得我漏掉了一个微不足道的点。
发布于 2012-04-25 02:54:12
ServiceLoader无法做到这一点。
为了将类公开为ServiceLoader可以发现的服务,您需要将其名称放入提供者配置文件中,如Creating Extensible Applications With the Java Platform 中所述。
没有内置的方法来查找实现特定接口的所有类。可以做类似事情的框架使用它们自己的类路径扫描解决方案(即使使用自定义类路径扫描,也不容易,因为.class文件只存储关于直接实现的接口的信息,而不是传递的)。
发布于 2015-07-12 10:05:38
如果实现是您自己编写的实现,则可以使用AutoService通过ServiceLoader接口提供它们,例如
@AutoService(Operation.class)
class Foo implements FooInterface {
}
@AutoService(Operation.class)
class Bar extends Foo {
}发布于 2016-08-17 21:34:09
为了在运行时扫描类路径以获取特定接口的实现,您需要使用不同的解决方案,例如。Reflections (注意最后的,这不是java的反射API)
https://stackoverflow.com/questions/10304100
复制相似问题