是否有一种简单的方法可以动态加载扩展抽象类的类?

时间:2013-06-01 05:29:10

标签: java dynamic classloader

问题: 我有一个外部用户可以实现的抽象类。这些类将在我的应用程序中使用。但是我事先并不知道这些课程。我想在运行时加载它们。

当前设置: 当前设置是在jar文件中添加类,并在运行程序时将它们添加到类路径中。然后,程序在类路径中搜索任何类文件,并查看它们是否不是抽象的,而不是接口,以及它们是否可以从该类分配抽象类。

  • 将jar文件添加到classpath
  • 启动程序
  • 对于类路径中的每个(jar文件中的类或类)
  • 检查抽象类是否可以从类和
  • 分配
  • 类不是抽象而不是接口

有没有图书馆或简单方法呢?我担心这段代码可能有点容易出错。

更新: 像这样的东西?

private static <T> Class<? extends T> loadSubclasses(Class<T> superClass)

更新: 我认为这会有所作为

我想找到这些类以便以后使用它们。我认为这将解决问题(仍需测试此代码):

public static <T> Set<Class<? extends T>> 
        loadSubClasses(Class<T> superClass) {
    return loadSubClasses(superClass, 
            ClasspathHelper.staticClassLoader());
}

public static <T> Set<Class<? extends T>> loadSubClasses(
        Class<T> superClass, ClassLoader classLoader) {
    Reflections reflections = new Reflections(classLoader);

    return reflections.getSubTypesOf(superClass);
}

0 个答案:

没有答案