2

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

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

@ServiceProvider(service=interfaceA.class)

在定义实现 interfaceA 的类之前。我发现这确实找到了实现 interfaceA 的类。但是,我很确定 Lookup 使用 java 反射为我提供了该类的新实例。我最大的问题是我可以在我的 Netbeans 项目中引入哪些库受到限制,否则之前的问题会回答这个问题。

这种动物是否存在于纯 Java 或非常知名的库中?

谢谢

4

1 回答 1

1

不。因为java在需要时动态加载类,所以你不能真正“枚举”JVM可用的所有类。用于执行此操作的大多数机制涉及预先在路径上的某个位置(xml 文件、属性文件)列出所有子类并使用它,或者将它们标记为由某个容器进行某种运行时处理(您的 @ServiceProvider 注释) . Java EE、Spring 和 guice 是一些众所周知的容器——但这样的代码在这样的容器之外无法工作。

我还看到了尝试遍历类路径上的所有 jar 的代码,但是这样的代码非常脆弱,并且通常与它运行的特定环境相关联。

于 2013-03-14T18:06:00.977 回答