最近开始投入时间,进行OSGI的学习,买了林昊的《OSGI的原理与实践》,并且参考51cto上的文章等其他资料,来整理知识
OSGI的动态模块性开发,很大程度在于OSGI中Bundle之间依赖性的设计方案,我个人认为这是OSGI 中一个很有价值的地方,
在我们平时的web开发中,虽然说是模块性开发,但是那种依赖设计,不是真正的模块,达不到即插即用,及删及无得效果;
而在OSGI规范中,则可以实现这种“理想中”的模块化,达到了,物理上脱离的模块开发。
回到Bundle之间依赖性的问题上来,
bundle之间类的共享:
通过 export package的方式实现的,在bundle的manifest中通过制定export package的方式将特定的package与其他的bundle共享。
而引用其他bundle所暴露的package有两种方式,第一是通过 import package的方式,第二种是通过required bundle的方式
OSGi容器为每个Bundle创建不同的classloader,
因此每个Bundle能访问位于下列位置中的类:
a) 位于Java启动类路径下的、所有以Java.*开头的包中的类;
b) 位于OSGi框架类路径下的类,通常有一个独立的类加载器负责加载框架的实现类及关键的接口类;</