Java Felix/OSGi:如何使用非OSGi服务的SCR组件?

Java Felix/OSGi:如何使用非OSGi服务的SCR组件?,java,dependency-injection,osgi,apache-felix,Java,Dependency Injection,Osgi,Apache Felix,ApacheFelix的SCR允许声明(通过注释或XML)组件,然后将这些组件实例化、连接到它们的依赖项并注册为OSGi服务 也可以跳过服务注册部分,让SCR创建组件(通过指定@SCR.component,但省略@SCR.service)。我认为这可能只对依赖注入(在捆绑包中)有用,但是如何使用组件呢?可以使用scr.reference注入服务,但这不适用于非服务(或者它是否适用) 直接访问SCR API是可行的,但直接与容器服务对话有点违背DI的目的。我认为您只能注入OSGI服务。如果你想使用

ApacheFelix的SCR允许声明(通过注释或XML)组件,然后将这些组件实例化、连接到它们的依赖项并注册为OSGi服务

也可以跳过服务注册部分,让SCR创建组件(通过指定@SCR.component,但省略@SCR.service)。我认为这可能只对依赖注入(在捆绑包中)有用,但是如何使用组件呢?可以使用scr.reference注入服务,但这不适用于非服务(或者它是否适用)


直接访问SCR API是可行的,但直接与容器服务对话有点违背DI的目的。

我认为您只能注入OSGI服务。如果你想使用依赖注入,也许你应该检查GoogleGuice。不幸的是,我不知道它是否能在OSGI容器中开箱即用


关于SCR组件,如果一个组件提供了您希望在另一个组件中使用的功能,我认为应该使用服务公开它。

Peaberry()是Guice的一种改编,可以与OSGi一起使用。DS非常适合于此。“如果一个组件提供了您希望在另一个组件中使用的功能,我认为应该使用服务公开它”——确切地说。如果您想要的是“内部捆绑包依赖项注入”,那么您可能希望使用私有实现类(而不是公共接口)将组件设置为提供的服务,并在另一个组件中从捆绑包中引用该服务。这样,服务就位于全局服务注册中心中,但没有其他包可以使用它,因为它将无法加载该类。