我想在Java应用程序中发现运行期间接口的所有实现,并从用户可以添加到文件夹的JAR文件中动态加载这些类。它基本上是一个插件系统。
我找到了一些解决方案:
还有其他广泛使用的解决方案吗?
更新:不需要代码分离,OSGi似乎对我现在的简单需求来说太复杂了。我还在这个问题的标题中添加了“简单”以澄清我的意图。
答案 0 :(得分:4)
它有点偏重,但你应该考虑Apache Felix或Eclipse Equinox,这两个都是OSGi实现,非常活跃和踢,但可能有点超出你的需求。但是,这是OSGi旨在解决的问题之一。
答案 1 :(得分:1)
答案 2 :(得分:0)
就像@skaffman所说的那样,OSGi和现代实现似乎是一个完美的解决方案。如果您正在使用guice,请考虑iPOJO,它完美地结合了OSGi堆栈中的注释(注意iPOJO适用于任何OSGi平台)。如果您更喜欢使用XML / Spring,请考虑使用Blueprint。
最后,考虑到JSPF,我不会分享你对其不成熟的看法。在该项目上进行了一些合作,我发现它在其领域非常有用,因为它允许轻松使用插件,而没有OSGi提供的麻烦和类路径分离。
答案 3 :(得分:0)
+1 SPI - 它是轻量级的,一点点维护(服务/ *文本文件),但Java的类加载器工作任何“自动发现”的方式都不会100%可靠;您可以使用一个简单的程序减少文本文件的麻烦,该程序对于给定的项目/目录生成和/或(我建议)测试包含所有实现
+2 OSGi - 如果你愿意去中量级,并注意实施变得越来越轻松(至少其中一些!)