我正在实现一个接口,现在我想在classpath中获得此接口的所有实现。这是可能的还是我应该做些什么呢?
答案 0 :(得分:24)
Reflections库可以让你这样做(在某种程度上):
Set<Class<? extends SomeClassOrInterface>> subTypes =
reflections.getSubTypesOf(SomeClassOrInterface.class);
但我不建议这样做。想象一下一个带有50个外部jar的典型类路径,每个jar都是一个像spring,hibernate,aspectj,jsf等大框架。这需要很长时间。
如果您想拥有某种插件机制,以便其他人可以实现您的接口并提供实施的jar,那么请查看java.util.ServiceLoader
答案 1 :(得分:6)
充其量,这将是昂贵的。最坏的情况(取决于类加载器)可能是不可能的。
我强烈建议您寻找替代方法来解决您要解决的潜在问题。