簡體   English   中英

如何在運行時從jar文件加載實現接口的類?

[英]How to load a class which implements a interface from a jar file at runtime?

我想實現一個可以使用用戶實現的類的應用程序。 每個類都應實現一個我定義接口的接口,最后,由用戶實現的所有類都應存儲在jar文件中。 用戶將jar文件復制到類路徑中,然后僅將jar文件名提供給我的應用程序。 我的應用程序應該能夠動態加載jar文件。 為此,我發現這篇文章非常有用,但是它通過類名加載類。 我想根據他們的父母來上課。

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

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

假設加載的jar文件同時具有AB類。 我想通過了解iB接口名稱從類B獲取實例。

我該怎么辦?

看看這篇文章: 查找實現接口的Java類

它討論您想要的解決方案。

我知道我要提出的建議並不是最簡單的方法,但是您只是描述了Java插件體系結構的基本用例之一,以及OSGi的成功案例。

我建議您使用Apache Felix之類的工具,使用戶提供的jar實現一個簡單的osgi.BundleActivator,並將Interface的實現注冊為OSGi服務。 (這只是一個花哨的哈希圖,與REST服務等無關)。

然后,您可以獲取給定接口的所有實現。 它非常簡單。 您可以在此處查看Felix文檔: http : //felix.apache.org/site/apache-felix-framework-launching-and-embedding.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM