2010-10-18 151 views
0

我正在尋找類似於.NET託管擴展性框架(http://mef.codeplex.com/)的Java功能。對於那些誰也不知道MEF,我想是這樣的:動態加載Java接口的實現

給定一個接口

public interface IFoo { 
... 
}  

通過查看加載罐子動態加載的接口的實現。

IFoo foo = loadClassThatImplementsInterface<IFoo>(); 

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

這在Java中根本不可能嗎?我發現一些谷歌點擊說明這是不可能的,但這似乎有點......呃?

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

回答

4

在「純」 Java中,你可以使用的ServiceLoader: ​​

您只需提供您的擴展jar元數據,這是聰明的,可擴展的容易。

,或者尋找像吉斯或Spring一個DI框架...

+0

對於這個項目,我不想使用DI框架,所以我會考慮ServiceLoader,thx – 2010-10-18 08:53:20

+0

好吧,不要忘記接受答案,如果它是你正在尋找;-) thx – 2010-10-18 08:54:19

+0

找到這個在知道要尋找什麼之後: http://java.dzone.com/news/simple-dependency-injection-wi – 2010-10-18 09:02:30

0

它很可能,一個loadClassThatImplementsInterface(IFoo.class)