0

我正在开发一个连接到相同类型的不同设备的项目。我已经为单个设备实现了一些类,但现在开发了一个所有“驱动程序”都应该实现的通用接口。

我现在的问题是:稍后,用户应该通过 GUI 使用我的程序,并且应该能够“加载”我提供的驱动程序。但是这些驱动程序看起来如何?带有实现驱动程序接口的类的 .jar?一个大致描述要做什么的 xml 文件?

4

1 回答 1

0

您可以考虑以下帖子作为起点:https ://stackoverflow.com/a/2575156/471129

基本上,依赖注入和控制反转用于从外部指定配置并经常从不同的 .jar 文件动态加载代码,这似乎是您想要做的。

当然,您总是可以通过类名加载代码,如下所示:

public interface IPlugin {
    // some methods that all the plugins will have in common
}

private static IPlugin loadIPluginByClassName(String plugInClassName, ClassLoader classLoader) {
    // NOTE: throws NoClassDefFoundError or ClassNotFoundException if cannot load the class
    // or throws ClassCastException if the loaded class does not implement the interface    
    Class<?> cls = classLoader.loadClass(plugInClassName);
    IPlugin ans = (IPlugin) cls.newInstance()
    return ans;
}

您需要使用包限定的类名和类加载器调用 loadIPluginByClassName(),如

IPlugin pi = loadIPluginByClassName("com.test.something.MyPlugin", SomeClassInYourProject.class.getClassLoader());

只要 .jar 在类路径中,插件就可以在它自己的 .jar 中。

如果您不想从外部 .jar 加载它们,可以使用更简单的

IPlugin pi = loadIPluginByClassName(MyPlugin.class.getName(), SomeClassInYourProject.class.getClassLoader());

这将创建对您的插件类的直接引用(这可能会有所帮助,因为可以将其作为参考)

于 2012-07-30T22:18:22.253 回答