【问题标题】:Service Factory implementation using declarative services in OSGi在 OSGi 中使用声明式服务实现服务工厂
【发布时间】:2025-12-07 04:10:01
【问题描述】:

我正在使用 OSGi 声明式服务和设置注册一个 OSGi 服务

servicefactory="true"

如下。

<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="test.Configuration">
  <implementation class="test.ConfigurationImpl"/>
  <service servicefactory="true">
     <provide interface="test.Configuration"/>
  </service>
</scr:component>

我正在尝试从另一个捆绑包中多次使用该服务。 但是,它会返回相同的服务实例。

这里可能出了什么问题??

【问题讨论】:

    标签: osgi declarative-services service-factory


    【解决方案1】:

    servicefactory 标志意味着每个消费者捆绑包都有一个单独的实例。因此,如果您使用 2 个捆绑包中的服务,那么您将获得 2 个实例。您确实不会为每个消费者获取多个实例。

    如果您希望消费者以编程方式控制实例数量,则需要使用ComponentFactory 方法。

    【讨论】:

    • 我想同时使用来自同一个消费者的服务,但是在一个新的服务实例上。这可以通过 ComponentFactory 方法实现吗??
    • 您可以像 Neil 所说的那样使用 ComponentFactory,但在这种情况下注册一个 FooFactory 也是一个好主意,这样您就可以留在一个类型安全的世界中。