OSGi中,我们可以把要实现的功能分割成多个子模块,每个子模块用单独的bundle来实现其专属功能,每个bundle都有自己的classloader, 从而做到了真正的物理意义上的模块隔离。这样一来就引出了bundle间相互通信的问题, 总的来说,bundle间通信主要由以下三种手段实现:
(1):通过Export-Package和Import-Package实现
每个模块可以通过声明Export-Package对外提供访问此模块中的类和接口,先将bundle导出,再导入(Import-Package)到需要调用的bundle中即可。
(2):利用OSGi service
所谓的服务 (Service) 就是标准的 Java 对象向服务注册表 (Service Registry) 注册的一个或者多个接口 (interface)。 Bundle 可以向服务注册表注册服务,查询服务并使用它们
(3):利用OSGi事件管理服务(EventAdmin)