且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

无废话OSGi

更新时间:2022-09-18 12:51:24

原来看过一遍文章,叫无废话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有什么精确的理解呢?




本文转自道法自然博客园博客,原文链接:http://www.cnblogs.com/baihmpgy/archive/2009/09/19/1570222.html,如需转载请自行联系原作者