| 促进Java模块化开发技术传播
首页 资讯 入门 开发 经典书摘 标准 访谈 活动
蓝亭书序
热点投稿服务
Onboard 讨论
OSGi入门篇:模块层
由 Gou Rui 发布
已被浏览22971次 共有7条评论 已被18个人收藏 2012-11-25 15:07 顶(3) 踩(0)
模块化 分层 粒度
1 什么是模块化
模块层是OSGi框架中最基础的一部分,其中Java的模块化特性在这一层得到了很好的实现。但是这种实现与Java本身现有的一些模块化特性又有明显的不同。
本文介绍模块层的一些基础知识,以及OSGi联盟在设计模块层时所做的一些考虑。OSGi标准走到今天,并不是凭空想出来的,它的产生恰恰是为了弥补之前
一些技术的缺陷。
模块化其实就是计算机科学中常见的一个概念: “将一个大型系统分解为多个较小的互相协作的逻辑单元,通过强制设定模块之间的逻辑边界来改善系统的维
护性和封装性”。
在OSGi中模块的定义可以参考下图:
也就是说一个模块(module)定义了一个逻辑边界,这种模块本身精确的控制了哪些类是完全被封装起来的,而哪些类需要暴露出来作为外部使用。这样我
们就可以轻松的将实现屏蔽在模块的内部,而将公共API暴露在外部。
2 为什么需要模块化
2.1 OSGi中模块化与面向对象的联系与区别
按照以上模块化的定义,可能有的人会问:“在面向对象里面,不是也有对模块化的支持吗?”没错,面向对象的概念可以说也在一定程度上支持模块化编
程,那为什么还需要OSGi提供的模块化特性呢?这涉及到“逻辑边界”的不同粒度。
在用Java编写面向对象程序的时候,一个了解面向对象概念的人是不会把所有功能都塞到同一个类里面去的,面向对象让你从问题域中发现多个事物,并且每
个事物负责不同的功能,尽量做到高内聚和低耦合。在这里,我们可以说面向对象的模块化粒度是在“类”这个级别上。
而OSGi的模块化,则是通过为JAR包添加metadata来定义哪些类应该暴露哪些类又隐藏在包中,其控制可见性的粒度是在bundle(JAR包)这一层面上的。