【问题标题】:Implement driver concept in Java [closed]在 Java 中实现驱动程序概念 [关闭]
【发布时间】:2012-07-30 21:26:32
【问题描述】:

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

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

【问题讨论】:

  • 嗯。这听起来像是基本的设计工作,这是你真正必须解决的问题。这真的取决于您的要求。

标签: java driver


【解决方案1】:

您可以将以下帖子作为起点: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());

这会创建一个对您的插件类的直接引用(这会很有帮助,因为它可以作为参考找到)

【讨论】:

  • 这正是我想要的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 2017-09-06
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多