2

我想实现一个可以使用用户实现的类的应用程序。每个类都应该实现一个接口,我定义接口,最后,所有由用户实现的类,归档在一个 jar 文件中。用户将 jar 文件复制到类路径中,然后只将 jar 文件名提供给我的应用程序。我的应用程序应该能够动态加载 jar 文件。为此,我发现这篇文章非常有用,但它按类名加载类。我想根据他们的父母加载课程。

public class A implements iA {
    @Override
    int getAValue() { ... }
}

public class B implements iB {
     @Override
     int getBValue() { ... }
}

假设加载的 jar 文件同时具有AB类。我想B通过知道iB接口名称从类中获取一个实例。

我该怎么办?

4

1 回答 1

4

查看这篇文章:查找实现接口的 Java 类

它讨论了您想要的解决方案。

我知道我要建议的不是最简单的方法,但您刚刚描述了 Java 插件架构的基本用例之一和 OSGi 的成功故事。

我建议使用像 Apache Felix 这样的轻量级工具,使用户提供的 jar 实现一个简单的 osgi.BundleActivator 并将您的接口的实现注册为 OSGi 服务。(这只是一个花哨的哈希映射,与 REST 服务等无关)。

然后,您可以获取给定接口的所有实现。它非常简单。您可以在此处查看 Felix 文档:http: //felix.apache.org/site/apache-felix-framework-launching-and-embedding.html

于 2012-02-24T15:15:56.123 回答