【问题标题】:How can I find all implementations of interface in classpath?如何在类路径中找到接口的所有实现?
【发布时间】:2011-03-08 13:49:52
【问题描述】:

我正在实现一个接口,现在我想在类路径中获取该接口的所有实现。这是可能的还是我应该做其他事情?

【问题讨论】:

  • 如果您的意思是,您想一次性找到所有实现作为开发练习,我会使用 Bozho 指出的工具。如果您的意思是在运行时,作为程序的一部分,例如 Stephen C,我强烈建议您做其他事情。 :-)

标签: java reflection


【解决方案1】:

Reflections 库将允许您这样做(在一定程度上):

Set<Class<? extends SomeClassOrInterface>> subTypes = 
     reflections.getSubTypesOf(SomeClassOrInterface.class);

但是我不建议这样做。想象一个典型的类路径,有 50 个外部 jar,每个都是一个大框架,如 spring、hibernate、aspectj、jsf 等。这需要很多时间。

如果您想拥有某种插件机制,以便其他人可以实现您的接口并提供带有实现的jar,那么请查看java.util.ServiceLoader

【讨论】:

  • +1 我从来不知道java.util.ServiceLoader 存在 - 非常方便。
  • 感谢您的回答!虽然您不推荐它,但我有一个似乎非常适合此解决方案的用例,并且我可以异步运行查询而不会极大地影响应用程序的运行。然后我只在收集完成后才提供结果。
【解决方案2】:

充其量,这将是昂贵的。在最坏的情况下(取决于类加载器)可能是不可能的。

我强烈建议您寻找一种替代方法来解决您要解决的潜在问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-16
    • 2010-10-11
    • 2014-04-05
    • 1970-01-01
    • 2012-11-29
    • 2011-11-30
    • 2010-10-29
    • 1970-01-01
    相关资源
    最近更新 更多