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

Java OSGi:如果不取消设置服务会发生什么,java,osgi,declarative-services,Java,Osgi,Declarative Services,这就是我获得OSGi服务的方式: ServiceReference reference = bundleContext.getServiceReference(Foo.class.getName()); Foo foo=(Foo) bundleContext.getService(reference); 当我完成服务时,如果我不执行bunldeContext.ungetservice(reference),会发生什么情况: 如果我手动注册服务,例如在activator中 如果我使用声明式服务

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

ServiceReference reference = bundleContext.getServiceReference(Foo.class.getName());
 Foo foo=(Foo) bundleContext.getService(reference);
当我完成服务时,如果我不执行
bunldeContext.ungetservice(reference)
,会发生什么情况:

  • 如果我手动注册服务,例如在activator中
  • 如果我使用声明式服务,它是单例的

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

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