无废话OSGi

原来看过一遍文章,叫无废话AOP , 想用尽量少的词语将AOP表述清楚是一件很有挑战的事情。我在刚开始接触OSGi的时候,也没有找到一篇文章能够非常清楚、精确的描述出什么是OSGi。 在一年多时间里,我一直在脑子里问自己这个问题,随着OSGi.NET项目取得一些进展后,我对这个问题有了比较清楚的认识(当然,不能100%保证没有 问题,一定还有待进一步研究的,我在前文《OSGi——面向服务架构规范简述 》也描述过了关于OSGi的一些信息)。

OSGi 是一个面向服务框架的规范。服务是以插件的形式组织的,每一个插件在OSGi规范里被称为Bundle,即服务包,Bundle将向外界提供功能或服务。 Bundle间有两种依赖,一种是设计时依赖,即一个Bundle引用了另一个Bundle的某些类;另一种是运行时依赖,这种依赖是通过可管理的服务实 现的。

Bundle设计时依赖由配置文件的Runtime(OSGi.NET引入的)节点配置,主要有 AssemblyPath(OSGi.NET引入的)、FragmentHost、Import、Export、Require和 DynamicImport定义,Bundle在引用设计时依赖的类的时候是通过其自定义的类加载机制实现的。AssemblyPath定义了 Bundle本地所拥有的类型集合;FragmentHost指定这个Bundle的宿主Bundle,本Bundle称为片段Bundle,片段 Bundle的所有信息会集合到宿主Bundle中;Import表示一个Bundle引用了另一个Bundle中某个Export暴露的类集 合;Export表示一个Bundle向其它Bundle暴露出可被引用的类集合;Require表示一个Bundle引用另一个Bundle所有暴露出 来的类集合。只有当一个Bundle解析成功后,其类加载才能够确保正确。Bundle模块层定义了Bundle和设计时依赖相关机制。

Bundle 运行时依赖是通过可管理服务实现的,即一个Bundle通过服务注册表引用了另一个Bundle注册的服务,这种引用是动态的和可管理的。Bundle通 过配置文件或Bundle激活器实现服务注册与卸载,Bundle的生命周期操作管理了服务的状态。Bundle的生命周期层和服务层定义了Bundle 运行时依赖的实现。

OSGi规范在定义了面向服务框架规范的同时,还定义了标准服务规范,比如包管理服务、启动级别服务、日志服务等。

那么,您对OSGi有什么精确的理解呢?

猜你喜欢

转载自marsvaadin.iteye.com/blog/1379103