我正在寻找一种方法来查找当前在JVM中运行的所有实例,这些实例继承了给定的接口,比如interfaceA。我最初收到的建议是使用
Lookup.getDefault().lookupAll(interfaceA.class);
与
@ServiceProvider(service=interfaceA.class)
在定义实现interfaceA的类之前。我发现这确实找到了实现interfaceA的类。但是,我很确定Lookup使用java反射为我提供了该类的新实例。我最大的问题是我对可以在我的Netbeans项目中引入哪些库有限,否则之前的问题会回答这个问题。
这种动物是否存在于纯Java或非常着名的库中?
由于
答案 0 :(得分:1)
没有。因为java在需要时动态加载类,所以你不能真正“枚举”JVM可用的所有类。用于执行此操作的大多数机制涉及在路径上预先列出所有子类(xml文件,属性文件)并使用它,或者通过某些容器将它们标记为某种运行时处理(您的@ServiceProvider注释) 。 Java EE,Spring和guice是一些众所周知的容器 - 但是这样的代码不能在这样的容器之外工作。
我还看到过试图迭代类路径上所有jar的代码,但是这样的代码非常脆弱,通常与运行它的特定环境相关联。