8

我想在 Java 应用程序运行时发现接口的所有实现,并从用户可以添加到文件夹的 JAR 文件中动态加载这些类。它基本上是一个插件系统。

我为此找到了一些解决方案:

有没有其他广泛使用的解决方案?

更新:不需要代码分离,而且 OSGi 似乎对我现在的简单需求来说太复杂了。我还在这个问题的标题中添加了“简单”以澄清我的意图。

4

4 回答 4

4

它有点重,但是您应该考虑Apache FelixEclipse Equinox,它们都是 OSGi 实现,它们非常活跃且令人兴奋,但对于您的需求可能过度杀伤力。然而,这正是 OSGi 旨在解决的问题之一。

于 2010-07-13T08:55:56.993 回答
1

您可以尝试 Apache River(原 Jini)的服务发现

http://river.apache.org/

它通过远程接口发现服务并为您下载代理,这通常是一个 RMI 存根。

于 2012-04-05T14:09:11.597 回答
0

+1 SPI——它是轻量级的,需要一点维护(服务/* 文本文件),但 Java 类加载器的工作方式任何“自动发现”都不会 100% 可靠;您可以使用一个简单的程序来减少文本文件的麻烦,该程序为给定的项目/目录生成和/或(我推荐)测试所有实现都包括在内

+2 OSGi——如果你愿意去次中量级,并注意实现变得越来越轻和容易(至少其中一些!)

于 2011-11-02T11:23:01.167 回答
0

就像@skaffman 所说的那样,OSGi 和基于其的现代实现似乎是一个完美的解决方案。如果您在 guice 潮流中,请考虑iPOJO,它完美地结合了 OSGi 堆栈中的注释(注意 iPOJO 适用于任何 OSGi 平台)。如果您更喜欢 XML/Spring 潮流,请考虑使用Blueprint

最后,考虑到 JSPF,我不会分享您对其不成熟的看法。在该项目上进行了一些合作后,我发现它在该领域非常有用,因为它允许轻松使用插件,而无需 OSGi 提供的麻烦和类路径分离。

于 2010-07-13T09:08:45.823 回答