2010-10-18 66 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)