【发布时间】:2019-01-06 17:31:51
【问题描述】:
我阅读了 Neil Bartlett 的 this answer,其中指出 DS 能够替换旧的 ManagedServiceFactory 实例化服务方法:
通过添加“configurationPolicy: require”,组件可以用作单例(即 MS)或工厂(即 MSF)。如果您使用与 component.name 相同的 Factory PID 创建一个工厂配置,那么您将获得一个工厂。
据我所知,使用工厂 PID 创建新配置会使配置管理员创建此服务的新实例;确实,这就是发生的事情。
假设我的工厂 PID 为 test,然后我为 test-1 添加了一个配置为 felix-fileinstall。然后,当我添加相应的配置时,此服务会正确实例化并激活。
如果我这样做
@Reference(target="(service.pid=test-1)")
Test test;
这显然永远不会得到解决,因为创建的配置is required to have a generated GUID。
如何获得对该服务的引用?我需要为每个配置实例添加一个额外的属性来过滤吗?
【问题讨论】:
-
不确定是否可以使该参考工作,但如果您必须在代码中编写 PID,这可能不是一个好兆头。我会在服务配置上创建另一个属性并按此过滤。
-
谁说出我的名字,把我从沉睡中唤醒?
标签: java osgi declarative-services