为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

插件体系结构

2010-09-04 7页 pdf 314KB 28阅读

用户头像

is_677394

暂无简介

举报
插件体系结构 插件体系结构 文/陈刚 引言 大部份人最初对插件的感性认识应该是从 MP3 播放软件 winamp 中的各种皮肤和音效 插件开始的吧。插件虽非什么新鲜事物,但在过去,插件开发还是很少有人去涉及的。一般 来说,软件的插件开发大都面向内部开发人员开放,并且需要对该软件的构架相当的熟悉, 才有能力开发一个插件。而像 winamp,虽然可以让第三方来制作插件,但所做的插件对原 软件的扩展也仅局限某些特定领域,比如音效、界面风格等。 以前比较常用的是分层式体系结构,比如 Linux、TCP/IP。然而现在软件的生命周期越...
插件体系结构
插件体系结构 文/陈刚 引言 大部份人最初对插件的感性认识应该是从 MP3 播放软件 winamp 中的各种皮肤和音效 插件开始的吧。插件虽非什么新鲜事物,但在过去,插件开发还是很少有人去涉及的。一般 来说,软件的插件开发大都面向内部开发人员开放,并且需要对该软件的构架相当的熟悉, 才有能力开发一个插件。而像 winamp,虽然可以让第三方来制作插件,但所做的插件对原 软件的扩展也仅局限某些特定领域,比如音效、界面风格等。 以前比较常用的是分层式体系结构,比如 Linux、TCP/IP。然而现在软件的生命周期越 来越短、对软件功能的要求越来越强、需求变化也越来越快,一个软件的可扩展性,将很大 程度决定了该软件的生命力。因此随着时间的推移,具有高可扩展性的插件体系结构也开始 慢慢成熟起来,在 Java 界的 Eclipse、NetBeans 等,都是采用了插件体系结构的。 由于 Eclipse 的巨大成功,使其成为了插件体系结构的典范之作,并且广为人知。Eclipse 带动了插件概念的普及,随着插件功能的不断拓展,插件的应用范围也越来越广,开发插件 也逐渐的兴盛起来。本文就将以 Eclipse 作为案例来介绍一下插件体系结构 Eclipse简介 很多人都把 Eclipse 看做是象 JBuilder 一样的 Java 开发工具,但 Eclipse 的设计目标不仅 仅是成为单一的 Java 开发工具,而是成为一个通用工具平台。对于 Eclipse 来说,它不仅是 可以用来开发 JAVA 程序,只要装上相关插件(比如 C++插件),Eclipse 也可以成为于其他 编程语言的开发工具。从这个意义上来说,Eclipse 的最终竞争对手是微软的 Visual Studio, 而非仅仅 JBuilder。 此外,由于 Eclipse 的插件体系设计得非常完善,所以不仅可以开发工具类的插件,也 可以开发应用类软件的插件,这一点还有是不太广为人知的。从功能上来说,Eclipse 插件 完全能够实现一个像 OA 办公系统或 PhotoShop 的软件,下图所示的“学生成绩信息管理系 统”就是一个 Eclipse 插件。 在 Eclipse2.0 的时候,插件还是只能附在原 Eclipse 的基础上来运行。这对于想用插件 方式来开发应用系统的用户来说,会有两个不足之处:(1)客户在使用软件之前必须先运行 Eclipse。(2)Eclipse 原来的菜单、按钮无法完全隐藏。 Eclipse 的开发团队注意到了这个问。在 Eclipse3.0 之后,将其平台运行环境做了完全 的剥离,形成了一个称为 RCP 的运行平台。RCP 的英文全称叫 Rich Client Platform(注意 不是 Program),也叫胖客户端平台。 通过 RCP 方式,所开发的应用软件的运行环境就只需要几个插件包支持即可,而不用 下载几十 M 的 Eclipse。并且 Eclipse 的原菜单、按钮可以被完全隐藏掉,让你所开发的更象 一个独立的软件。 Eclipse的扩展 在 Eclipse 集成环境中的各部份都是可插入、可扩展的,下面就罗列一些 Eclipse 中最常 用的可插入、扩展的地方。 1、主菜单、工具栏、透视图、视图、编辑器 2、Eclipse 的首选项(主菜单“窗口->首选项”) 3、帮助(主菜单“帮助->帮助内容”) 4、弹出式的快捷帮助(焦点定于某部位,按 F1 弹出相关帮助信息) 以上界面看似复杂,但因为插件是基于原 Eclipse 扩展的,所以实际的界面代码量极少 而且界面构建简单,这一点相对传统 JAVA 胖客户端应用程序的优点很明显。像 Eclipse 中 的视图、编辑窗、停泊窗这些界面如果用传统方式来开发会很麻烦,但用 Eclipse 插件来实 现,则不费吹灰之力。因此 Eclipse 插件的开发方式特别适合对界面要求比较高的项目。 Eclipse的插件体系结构 1、总体结构 Eclipse 平台是一个开放式插件体系结构,它提供了一些自身的扩展点来给其他插件做 扩展。并且 Eclipse 平台负责管理这些插件的运行,这样开发者可以只专注开发自己的插件, 而不用去关心如何在运行时和其他插件进行配合。 Eclipse 的体系结构如下图所示: SWT/JFace 是 Eclipse 的图形 API 包,它和 JAVA 的 AWT/SWING 的作用是一样的,实 际上我认为它总体上要比 AWT/SWING 优秀。为什么 Eclipse 界面要比普通的 JAVA 程序漂 亮,就是因为它有基于一个全新设计的图形 API 包――SWT/JFace。所以要在 Eclipse 上开 发插件,首先必须了解 SWT/JFace。 最底层的“运行时内核 Runtime”是整个 Eclipse 插件的核心引擎。这是一个非常小的内 核,也称为“微内核”(Micro-Kernel),其他部份(如 SWT/JFace)都是以插件的形式附加 在上面。这是现在很流行的体系结构设计:微内核+扩展(如下图所示)。 在 Eclipse 中,由 org.eclipse.osgi、org.eclipse.core.runtime 组成了运行时内核,而插件则 是这个内核之上的各个扩展模块,如下图所示。 2、Eclipse 中的插件 Eclipse 插件是一种在 Eclipse 平台中提供某些服务的组件。这个概念类似于 SOA(面向 服务的架构)的服务。从具体开发方面来看,插件的实现代码是基于 Eclipse 平台所提供的 扩展点来进行编写的,主要有如下步骤: z 创建一些 Java 类,此类一般都要求继承自 Eclipse 中特定的父类或接口。比如,开 发一个 Eclipse 透视图,就需要实现透视图的指定接口 IPerspectiveFactory;而要在 Eclipse 的首选项窗口添加一项,就需要继承自指定的父类 PreferencePage。 z 将所创建的 JAVA 类,在 Eclipse 的一个配置文件(plugin.xml)中注册声明。 从插件的目录结构来看,Eclipse 的所有插件都被放在一个“plugins”目录下面,在 plugins 下每个插件都有一个独立的文件夹。下图是作者开发的 mypugin2 插件的目录结构: 在 Eclipse 插件中最重要的就是 plugin.xml 文件,插件使用它来告诉 Eclipse 自己将如何 插入到平台中。plugin.xml 主要包括如下信息: z 插件的基本信息。比如:插件名称、唯一 ID 号、版本号、开发者等。 z 插件的运行支持库。 z 插件所依赖的其他插件。 z 插件的扩展点配置信息。 举例说明,myplugin2 插件的 plugin.xml 文件的内容如下: -------插件的 Plugin 类 -------插件的运行支持库,这个插件只需要一个连接 mysql 的 jdbc 支持包 -------插件运行所要依赖的其他插件 -------使用了哪些 Eclipse 平台的扩展点,这 -------编辑器的 id 号(这里和其类一样) …… 其他编辑器设置 …… 其他扩展点设置,比如:按钮、菜单、透视图、视图、帮助、首选项。 3、Eclipse 运行时内核 正如上面 plugin.xml 文件中项所反映的,插件与插件之间是有依赖关系的,不 过这些依赖关系都被 Eclipse 运行时内核统一管理着。Eclipse 运行时内核是健壮而微小的, 主要具有如下功能: z 定义了插件必须符合的结构以及应该具有的信息 z 查找、装入、注销插件 z 管理着一个插件的注册,并各插件的配置信息,以备调入插件时使用。 Eclipse 启动时,运行时内核将扫描 plugins 目录下所有文件夹中的 plugin.xml 等配置文 件,然后将插件添加到注册表中,但并不激活插件,只是缓存着各个插件配置文件中的数据 信息。当用户真正使用到这个插件时,运行时内核才真正将插件调入激活,这样就能避免未 使用的插件消耗内存和性能。而且当插件不再使用后,它就会在适当时机被清除出内存。因 此,我们不必担心因为装了太多插件而影响 Eclipse 的运行效率。 正是 Eclipse 对插件动态载入、动态调用的特性,使用得插件的安装和卸载都非常简单 方便:我们只需要将插件复制到指定目录就算安装好了插件,卸载也仅仅是把原来复制的插 件文件删除掉。 那么是什么使得 Eclipse 运行时核具有如此灵活而强大的功能呢?答案就是我们前面提 到的 org.eclipse.osgi,它是 OSGi 的一个实现。 4、关于 OSGi OSGi(Open Service Gateway Initiative)是一个成立于 1999 年的非赢利组织,旨在为家 用硬件设备的远程互访建立一个开放的规范。基于 OSGi 规范的硬件设备,就能够访问控制 在网络任何位置的其他设备,并且网络设备可以被随时安装、更新、删除而不影响其他设备 的运行。 OSGi 的目标与 Eclipse 何其相似,所以 Eclipse 基于 OSGi 规范来实现了它的插件机制。 同时,也是 Eclipse 让这个本来为家用设备而设计的 OSGi 规范,在软件业也有了不凡的表 现,这一点和 JAVA 非常相似。 Eclipse 和 OSGi 的关系和 JBoss 与另一个规范 JMX 有些类似。JBoss 也是基于“微内核 +扩展”理念来设计的,同时 JBoss 还是一个完全 SOA 面向服务的架构。JMX 相当于 JBoss 的微内核,所有的服务(如 JNDI、JMS 等)都作为一个扩展注册到 JBoss 内核之上,并由 内核来管理这些服务。 最后小结 对于架构设计来说,Eclipse 是“微内核+扩展”的经典实现,具有很好的参考价值。而 且其开放源代码,为我们更深入的了解这种体系结构的实现提供了方便。 对于应用开发来说,Eclipse 的插件机制为我们提供了一种新的开发方式。特别是 Eclipse3.0 之后出现的 RCP,给死气沉沉的 JAVA 胖客端的开发领域带来了新鲜的空气。 而这一切都是插件体系结构带给我们的礼物。 作者简介 陈刚,广西桂林人,著作有《Eclipse从入门到精通》 您可以通过其博客了解更多信息和文章:http://www.chenGang.com.cn 插件体系结构 引言 Eclipse简介 Eclipse的扩展 Eclipse的插件体系结构 最后小结 作者简介
/
本文档为【插件体系结构】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索