2012-07-30 28 views
0

我正在研究連接到相同類型的不同設備的項目。我爲單個設備實現了幾個類,但現在開發了一個所有「驅動程序」應該實現的通用接口。在Java中實現驅動程序概念

現在我的問題是:後來,用戶應該通過GUI使用我的程序,應該能夠「加載」我提供的驅動程序。但這些驅動程序的外觀如何?帶有實現驅動程序接口的類的.jar?一個大致描述要做什麼的xml文件?

+3

umm。這聽起來像基本的設計工作,這是一個你必須解決的問題。這真的取決於你的要求是什麼。 – 2012-07-30 21:28:15

回答

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()); 

這將創建一個直接引用你的插件類(可以是有益的,這樣可以發現作爲參考)

+0

這正是我一直在尋找的! – user1406177 2012-08-01 20:39:41