还有什么可以在Java中用作ServiceLoader替代方案?

时间:2010-07-07 11:39:02

标签: java serviceloader

我正在寻找类似ServiceLoader的东西,但它不依赖于SPI文件,其中应枚举所有服务实现,然后将其添加到某些类加载器的路径中,以便找到它。

假设有一个应用程序,它具有接口和服务的一些实现。可以使用什么框架,允许您向应用程序添加新的JAR,其中包含一些新的实现,并且它们可以自动添加到该应用程序内所有类加载器的类路径中?所有类加载器在这里都非常重要,因为如果这是一个NetBeans模块应用程序,那么NetBeans平台就会产生奇怪的魔力并且您永远不知道哪个类加载器被哪个线程使用,哪个类路径等...它也会很棒,如果不需要重新启动应用程序来查找新的JAR,但这不是一个重要的要求。

我已经听说过OSGi,但这看起来太大了,我只需要1%的功能。

感谢您的任何建议!

3 个答案:

答案 0 :(得分:7)

最简单的解决方案是使用JSPF

更多“企业”可能是使用OSGi ......但在这种情况下,您需要查看iPOJO作为示例。对不起,我终于重新阅读了你的留言。我认为,与你所说的相反,OSGi正是为了满足您的需求,因为它可以精确地实现服务加载和动态布线。

IoC容器可以通过一些扩展提供这种功能(我认为至少可以使用Guice扩展)。

答案 1 :(得分:2)

似乎您正在寻找Netbeans Lookup API - Link

答案 2 :(得分:0)

较新的替代方案(这是一个老问题)可能是sezpoz

它与JDK ServiceLoader非常相似,它使用META-INF资源查找,但资源是由注释处理器自动创建的。因此,它的注释很重,并且通常以后期处理为代价更安全。它由Hudson / Jenkins使用。

我相信Kohsuke是第一个提出这个注释处理理念的人:http://metainf-services.kohsuke.org/