簡體   English   中英

動態加載Java接口的實現

[英]dynamically load implementation of interface in Java

我正在尋找類似於.NET托管擴展框架(http://mef.codeplex.com/)的Java功能。 對於那些不了解MEF的人,我想要這樣的東西:

給定接口

public interface IFoo {
 ...
}    

通過查看已加載的jar,動態加載接口的實現。

IFoo foo = loadClassThatImplementsInterface<IFoo>();

關鍵是程序員在代碼時不知道實現的名稱,但是在代碼中提供了擴展點。

在Java中根本不可能嗎? 我發現一些Google命中說這是不可能的,但這似乎有點...是嗎?

當在編譯時知道實現的完全限定名稱時,有許多使用類加載器的示例。 那不是我想要的。

在“純” Java中,您可以使用ServiceLoader: http : //download.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html

您只需在擴展jar中提供元數據,該數據既智能又易於擴展。

或者尋找像Guice或Spring這樣的DI框架...

使用loadClassThatImplementsInterface(IFoo.class)很有可能。

暫無
暫無

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

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