我正在研究連接到相同類型的不同設備的項目。我爲單個設備實現了幾個類,但現在開發了一個所有「驅動程序」應該實現的通用接口。在Java中實現驅動程序概念
現在我的問題是:後來,用戶應該通過GUI使用我的程序,應該能夠「加載」我提供的驅動程序。但這些驅動程序的外觀如何?帶有實現驅動程序接口的類的.jar?一個大致描述要做什麼的xml文件?
我正在研究連接到相同類型的不同設備的項目。我爲單個設備實現了幾個類,但現在開發了一個所有「驅動程序」應該實現的通用接口。在Java中實現驅動程序概念
現在我的問題是:後來,用戶應該通過GUI使用我的程序,應該能夠「加載」我提供的驅動程序。但這些驅動程序的外觀如何?帶有實現驅動程序接口的類的.jar?一個大致描述要做什麼的xml文件?
你可能會考慮以下職位爲出發點: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());
這將創建一個直接引用你的插件類(可以是有益的,這樣可以發現作爲參考)
這正是我一直在尋找的! – user1406177 2012-08-01 20:39:41
umm。這聽起來像基本的設計工作,這是一個你必須解決的問題。這真的取決於你的要求是什麼。 – 2012-07-30 21:28:15