2012-02-24 67 views
2

我想實現一個可以使用用戶實現的類的應用程序。每個類都應該實現一個接口來定義接口,最後是由用戶實現的所有類,它們都歸檔在一個jar文件中。用戶將jar文件複製到類路徑中,然後僅將jar文件名稱提供給我的應用程序。我的應用程序應該能夠動態加載jar文件。爲此,我發現this post非常有用,但它按類名加載類。我想要根據父母加載課程。如何在運行時加載一個從jar文件實現接口的類?

public class A implements iA { 
    @Override 
    int getAValue() { ... } 
} 

public class B implements iB { 
    @Override 
    int getBValue() { ... } 
} 

假設加載jar文件既有AB類。我想通過知道iB接口名稱獲得B類的實例。

我該怎麼辦?

回答

4

入住這個帖子出來:Find Java classes implementing an interface

它談到了解決方案,你想要什麼。

我知道我要建議的不是最簡單的方法,但是您剛剛描述了Java中插件體系結構的基本用例和OSGi的成功案例。

我建議使用像Apache Felix這樣的東西,使用戶提供的jar實現一個簡單的osgi.BundleActivator,並將接口的實現註冊爲OSGi服務。 (這只是一個奇特的哈希映射,與REST服務或類似的東西無關)。

然後你可以獲得給定接口的所有實現。它非常直接。你可以看看這裏的Felix文檔:http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html

+0

love osgi也是如此,當你用osgi開始的時候很痛苦,但它是值得的。我想你應該提到felix的自動部署選項,它會更好地適應他的情況。 – 2012-02-24 15:44:18

相關問題