2013-03-14 29 views
2

我正在寻找一种方法来查找当前在继承给定接口的JVM中运行的所有实例,如interfaceA。我最初收到的建议是实施了InterfaceA类的定义之前使用如何查找继承给定接口的类实例?

Lookup.getDefault().lookupAll(interfaceA.class); 

@ServiceProvider(service=interfaceA.class) 

。我发现这确实找到了实现interfaceA的类。但是,我非常肯定,Lookup为我提供了一个使用java反射的类的新实例。我最大的问题是我对我可以在我的Netbeans项目中引入的库有限,否则以前的问题可能会回答这个问题。

这样的动物存在于纯Java还是非常知名的库中?

谢谢

回答

1

没有。由于Java在需要时动态加载类,因此无法真正“枚举”JVM可用的所有类。大多数用于完成此操作的机制都涉及预先在路径中的某处(XML文件,属性文件)列出所有子类并使用它,或者通过某些容器将它们标记为某种运行时处理(您的@ServiceProvider注释) 。 Java EE,Spring和Guice是一些众所周知的容器 - 但是这样的代码在这样的容器之外不起作用。

我也看过一些代码,它试图遍历类路径上的所有jar,但是这样的代码非常脆弱,通常与它运行的特定环境绑定在一起。

+0

我很害怕这个。我将使查找方法起作用。感谢您的帮助。 – Madviola 2013-03-14 18:26:39