Java在Java中实现动态插件

时间:2012-06-28 10:35:58

标签: java dynamic extensible serviceloader

根据本教程,我开发了一个加载插件dinamicaly的应用程序: http://solitarygeek.com/java/a-simple-pluggable-java-application,但我遇到了一个问题。 在我的主应用程序中,我有一个静态方法的类,如何从我的插件中访问该类? 当我尝试从加载的插件访问该类时,它给我一个错误,即找不到类,尽管插件和应用程序正在运行。 谢谢

3 个答案:

答案 0 :(得分:1)

在插件架构中,您不应该直接访问插件实现类。您可以随意使用界面,通过该界面,您可以访问实施类的实例。这显然排除了任何静态方法。将这些方法重构为实例方法并通过接口公开它们。

答案 1 :(得分:0)

听起来像是一个类加载器问题。加载插件的类加载器看不到您的主类。没有代码示例很难再说了。

答案 2 :(得分:0)

我设法通过将应用程序类加载器作为父类加载器创建类加载器来解决我的问题,如下所示:
URLClassLoader MyLoader = new URLClassLoader(new URL [] {},MyClass.class.getClassLoader()),现在,我的应用程序中加载的所有类对于加载了MyLoader的插件都是可见的