Dependency injection OSGi内外使用的捆绑包的推荐DI解决方案

Dependency injection OSGi内外使用的捆绑包的推荐DI解决方案,dependency-injection,osgi,Dependency Injection,Osgi,我们使用混合的OSGi和非OSGi环境。 因此,我们生产的所有JAR都是捆绑包,以支持OSGi容器内外的部署和运行时。因此,我们所有的服务都是在没有任何OSGiAPI集成的情况下编写的,我们使用单个OSGi扩展包将所有服务注册为OSGi服务 在OSGi容器内外将系统连接在一起时,我希望使用单个DI解决方案(即相同的配置文件)。这相当有效地阻止了我使用简单的蓝图DI 你推荐什么? 有没有针对这种情况收集的最佳实践?我建议 一种服务注册表,在不使用OSGi框架的情况下启用OSGi风格的服务注册表程序

我们使用混合的OSGi和非OSGi环境。 因此,我们生产的所有JAR都是捆绑包,以支持OSGi容器内外的部署和运行时。因此,我们所有的服务都是在没有任何OSGiAPI集成的情况下编写的,我们使用单个OSGi扩展包将所有服务注册为OSGi服务

在OSGi容器内外将系统连接在一起时,我希望使用单个DI解决方案(即相同的配置文件)。这相当有效地阻止了我使用简单的蓝图DI

你推荐什么? 有没有针对这种情况收集的最佳实践?

我建议

一种服务注册表,在不使用OSGi框架的情况下启用OSGi风格的服务注册表程序

其想法是创建一些东西,使OSGi的服务和生命周期层的一部分在通常不可用的环境中可用

这允许您使用普通的OSGi服务注册表和声明性服务,即使在官方OSGi框架之外,除非您需要的不仅仅是声明性服务所提供的功能,还有一些选项

  • 谷歌将在内部(并明确使用)和外部工作
  • Apache-Camel将在OSGi、spring(AFAIK)和所有EJB容器(甚至)中工作,并且也将与Guice很好地工作
  • 由于您可能正在运行多个JVM,并且混合了新的OSGi和旧版,所以Camel可能非常适合。但您始终可以从Guice开始,稍后再集成Camel

    无论您做出什么决定,确保任何构建的jar都包含OSGi清单都是明智的。

    使用Spring

    它显然将在OSGi之外工作,您可以使用SpringDM使其适应OSGi内部的工作。它只需要添加一个osgi上下文文件来将bean绑定到服务注册中心或从服务注册中心绑定bean


    几年来,我们在Eclipse RCP应用程序的多个项目中使用了它。在这种特殊情况下,它也可以用于在UI级别绑定东西。

    虽然很有趣,但pojosr提供了我想要的反向服务。我希望人们在编码中使用普通的依赖注入(即非osgi颜色),并且已经说过依赖注入在OSGi内部部署运行时也能以同样的方式神奇地工作。+1 PojoSR和DS将是理想的-但可能涉及对测试覆盖率很低的遗留系统进行相当多的更改。+1这将在OSGi内部和外部都能以同样的方式工作。我不知道你所说的“正常依赖注入”是什么意思。如果声明性服务可以与OSGi以外的POSHORH一起使用,你可能会考虑从你的观点和其他使用你的库(假设是这种情况)的不同用例,考虑双方的新代码和遗留代码。如果没有一个通用的依赖注入框架,那么他们很可能已经在使用一个不同于您所选择的框架。伙计,告诉我这并不需要整个“SpringSource工具套件”。