【发布时间】:2023-02-14 23:20:31
【问题描述】:
我有一个主应用程序,它使用一个外部 jar 和一些我想从我的主应用程序调用的插件。在我的主应用程序中,我有一个外部 jar 文件中相应类的类名列表。我需要在运行时使用类名字符串创建这些类的对象。由于在主应用程序中,我没有类的完全限定名称,因为包是在 jar 中定义的,所以我无法加载类和创建对象,所以我将对象创建委托给 jar。我将类名传递给罐子。该 jar 有一个我可以访问的类,因为它由 pf4j 插件管理器加载,并且该类使用反射创建对象并将其返回给我的主应用程序。
public Job getJob(String jobClass) {
Job job = null;
Class<?> clazz = null;
try {
clazz = Class.forName("main." + jobClass);
Constructor<?> ctor = clazz.getConstructor();
job = (Job) ctor.newInstance();
} catch (ClassNotFoundException | IllegalAccessException | InstantiationException | NoSuchMethodException |
InvocationTargetException e) {
throw new RuntimeException(e);
}
return job;
}
使用上面的函数我得到了对象但是在主应用程序中是否有另一种方法可以在不使用反射的情况下做到这一点?
【问题讨论】:
标签: java plugins reflection jar classloader