我想实现一个可以使用用户实现的类的应用程序。每个类都应该实现一个接口,我定义接口,最后,所有类由用户实现,存档在一个jar文件中。用户将jar文件复制到类路径中,然后只将jar文件名提供给我的应用程序。我的应用程序应该能够动态加载jar文件。为此,我发现this post非常有用,但它按类名加载类。我想根据父母加载课程。
public class A implements iA {
@Override
int getAValue() { ... }
}
public class B implements iB {
@Override
int getBValue() { ... }
}
假设加载的jar文件同时包含A
和B
类。我希望通过知道B
接口名称来获取类iB
中的实例。
我该怎么办?
答案 0 :(得分: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