OSGi:如果不忘记服务会发生什么

时间:2017-04-01 08:25:34

标签: java osgi declarative-services

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

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

如果我在完成服务后没有bunldeContext.ungetSerivice(reference),会发生什么:

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

1 个答案:

答案 0 :(得分:1)

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

您正在使用Declarative Services,SCR将在引用该服务的组件的生命周期中的适当时间处理unget调用。