2012-02-24 99 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

相关问题