下面我们就来真正的写一个实例demo,结合OSGI的优点来说明一下,该demo设计如下图:
这个demo包含五个Bundles:
SayHello Bundle 包含一个接口,只有唯一的方法sayHello();
BobSays、RodSays、KentSays三个Bundles分别实现了三个具体的sayHello();
SayHelloServiceBundle提供了说hello的机会,是具体的一个服务应用,在功能上有点类似于main函数的味道。
这个HelloWorlddemo 的目的不但可以让读者小试牛刀,而且可以同时体会一下OSGi 最大的优点——服务状态的可更改性。
BobSays、RodSays、KentSays 实现了SayHello 暴露的接口,它们是sayHello 的具体执行者,但是在SayHelloService 调用的过程中,我们可以动态的改变到底是谁(BobSays、RodSays、KentSays)来说。
为了实现这个demo,还需要简单介绍一下OSGi 最简单的实现机制:OSGiBundles 之间包的依赖关系。每一个OSGi Bundle 的类文件可分为私有的、引入的、暴露的三种,如下图所示