用Java实现驱动程序概念

时间:2012-07-30 21:26:32

标签: java driver

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

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

1 个答案:

答案 0 :(得分: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());

这会创建一个对您的插件类的直接引用(这可以帮助您找到这样的参考)