【发布时间】:2011-03-08 13:49:52
【问题描述】:
我正在实现一个接口,现在我想在类路径中获取该接口的所有实现。这是可能的还是我应该做其他事情?
【问题讨论】:
-
如果您的意思是,您想一次性找到所有实现作为开发练习,我会使用 Bozho 指出的工具。如果您的意思是在运行时,作为程序的一部分,例如 Stephen C,我强烈建议您做其他事情。 :-)
标签: java reflection
我正在实现一个接口,现在我想在类路径中获取该接口的所有实现。这是可能的还是我应该做其他事情?
【问题讨论】:
标签: java reflection
Reflections 库将允许您这样做(在一定程度上):
Set<Class<? extends SomeClassOrInterface>> subTypes =
reflections.getSubTypesOf(SomeClassOrInterface.class);
但是我不建议这样做。想象一个典型的类路径,有 50 个外部 jar,每个都是一个大框架,如 spring、hibernate、aspectj、jsf 等。这需要很多时间。
如果您想拥有某种插件机制,以便其他人可以实现您的接口并提供带有实现的jar,那么请查看java.util.ServiceLoader
【讨论】:
java.util.ServiceLoader 存在 - 非常方便。
充其量,这将是昂贵的。在最坏的情况下(取决于类加载器)可能是不可能的。
我强烈建议您寻找一种替代方法来解决您要解决的潜在问题。
【讨论】: