我有这个组件(伪代码):
@Component
class ServiceComponent {
Set<MyService> set = synchronizedSet();
@Activate
activate(){... process set...}
@Reference
addService(MyService service){set.add(service)}
}
现在,最初,当组件被激活时,它将添加所有可用的MyService实例。但是,如何在激活组件后最好地处理添加项?
答案 0 :(得分:0)
实际上,您编写的代码只会获得MyService
的单个实例,因为默认情况下引用的基数为1..1。
要绑定到所有实例,请按如下所示更改引用声明:
@Reference(cardinality = ReferenceCardinality.MULTIPLE,
policy = ReferencePolicy.DYNAMIC)
void addService(MyService service) {
set.add(service);
}
请记住,此方法可以在activate()
方法之后甚至在dependencyManagement
方法中调用。
答案 1 :(得分:0)
在最新版本的DS中,您可以进行字段注释。如果您将字段指定为volatile,则在新服务输入时将更新该字段。
@Reference
volatile Set<MyService> services;