我想知道环境中的包何时使用 context.registerService(...) 注册服务。
有没有像 FrameworkEvent.STARTED 之类的监听器?
谢谢。
我想知道环境中的包何时使用 context.registerService(...) 注册服务。
有没有像 FrameworkEvent.STARTED 之类的监听器?
谢谢。
监听服务变化在 OSGi 中很常见。普通的 API 方式是使用ServiceTracker。您可以指定您感兴趣的服务,并在此类服务注册或取消注册时获得回调。
推荐的方法是使用像声明式服务 (DS) 或蓝图这样的框架,它们也提供了侦听服务的方法。
这是如何通过使用 DS 的接口侦听所有服务。另请参阅@Reference的 javadoc 。
@Reference(unbind="unbind"
public bind(MyService my) {...}
public unbind(MyService my) {...}
您可以通过BundleContext#addServiceListener注册ServiceListener 。
对于真实世界的示例,请查看 Gemini Blueprint 框架如何与服务侦听器一起使用:OsgiServiceCollection。有 OsgiServiceCollection$BaseListener 监听器实现。