OSGi:如果不取消服务会发生什么

OSGi: What happens if not to unget service

这是我获取 OSGi 服务的方式:

ServiceReference reference = bundleContext.getServiceReference(Foo.class.getName());
 Foo foo=(Foo) bundleContext.getService(reference);

如果我在完成服务后不执行 bunldeContext.ungetSerivice(reference) 会怎样:

  1. 如果我手动注册服务,例如在激活器中
  2. 如果我使用声明式服务并且它是单例

OSGi 框架为您的包维护每个服务的使用计数。如果您的捆绑包没有取消获取服务,则当您的捆绑包停止或服务未注册时,框架将自动释放它。

如果您使用的是声明式服务,SCR 将在引用该服务的组件的生命周期中的适当时间处理对 unget 的调用。