一种加载插件的方法及装置的制作方法

文档序号:6601783阅读:135来源:国知局
专利名称:一种加载插件的方法及装置的制作方法
技术领域
本发明涉及计算机领域,特别涉及一种加载插件的方法及装置。
背景技术
在现实应用场景中,一个软件即使再庞大,也无法满足和覆盖所有需求。因而设置软件具有扩展功能,如此用户可以将自己所需要的功能模块加载到软件中。其中,功能模块可以以插件的形式存在。目前采用Eclipse加载新插件。具体为首先技术人员在Eclipse中配置新插件的部署描述符,其中,部署描述符用于描述新插件的各项属性,然后Eclipse再根据新插件的部署描述符加载新插件。在实现本发明的过程中,发明人发现现有技术至少存在以下问题由于需要技术人员配置部署描述符,使采用Eclipse加载新插件的方案带有浓烈的技术色彩,普通用户无法加载新插件,给使用带来不便,且该方案对Eclipse这个平台的依赖性很强。另外,当加载完插件后,必须重新初始化软件,加载的新插件才能运行。

发明内容
为了给用户使用带来方便以及加载新插件后可直接运行新插件并无需重新初始化,本发明提供了一种加载插件的方法及装置。所述技术方案如下一种加载插件的方法,包括当软件初始化时,加载扩展目录中的每个插件,将所述每个插件的相关信息存储在注册表中,所述相关信息至少包括插件的ID、接口描述信息、功能描述信息和类加载器;实时监听所述扩展目录,如果监听出所述扩展目录中出现新插件;将所述新插件包括的所有类加载到Java虚拟机中并激活所述新插件,根据所述新插件的相关信息更新所述注册表。所述加载扩展目录中的每个插件,将所述每个插件的相关信息存储在注册表中, 具体包括将所述扩展目录中存储的每个插件读取到内存中,为所述每个插件建立类加载器,通过所述每个插件对应的类加载器,将所述每个插件中包括的所有类加载到所述Java 虚拟机中,并激活所述每个插件;从所述每个插件中读取其自身的ID、接口描述信息和功能描述信息,将所述每个插件的ID、接口描述信息、功能描述信息和类加载器存储在所述注册表中。所述实时监听所述扩展目录,如果监听出所述扩展目录中出现新插件,具体包括每隔一个周期从所述扩展目录中的第一个插件开始遍历,当遍历到插件时,从所述插件中获取其自身的ID,且从所述扩展目录中获取所述插件的修改时间;查找插件ID与修改时间的对应关系中是否存在包括所述插件的ID的记录,如果不存在,则所述插件为新插件;如果存在,则判断所述获取的修改时间是否与所述记录中存储的修改时间相同,如果不相同,则所述插件为新插件。如果所述新插件为新版本插件,所述将所述新插件包括的所有类加载到Java虚拟机中并激活所述新插件,根据所述新插件的相关信息更新所述注册表,具体包括从所述扩展目录中将所述新插件读取到内存中,为所述新插件建立类加载器,通过所述类加载器将所述新插件中包括的所有类加载到所述Java虚拟机中,并激活所述新插件;从所述新插件中读取其自身的ID和接口描述信息,从所述注册表中查找所述新新件的ID对应的接口描述信息和类加载器;将所述查找的接口描述信息和类加载器分别更新为所述读取的接口描述信息和所述建立的类加载器。如果所述新插件为新功能插件,所述将所述新插件包括的所有类加载到Java虚拟机中并激活所述新插件,根据所述新插件的相关信息更新所述注册表,具体包括从所述扩展目录中将所述新插件读取到内存中,为所述新插件建立类加载器,通过所述类加载器将所述新插件中包括的所有类加载到所述Java虚拟机中,并激活所述新插件;从所述新插件中读取其自身的ID、接口描述信息和功能描述信息,将所述新插件的ID、接口描述信息、功能描述信息和类加载器存储在所述注册表中。如果监听出从所述扩展目录中删除插件,则所述方法还包括获取所述删除的插件的ID,从所述注册表中删除包括所述ID的记录,通过垃圾回收器回收所述删除的插件。一种加载插件的装置,所述装置包括第一加载模块,用于当软件初始化时,加载扩展目录中的每个插件,将所述每个插件的相关信息存储在注册表中,所述相关信息至少包括插件的ID、接口描述信息、功能描述信息和类加载器;实时监听模块,用于实时监听所述扩展目录,如果监听出所述扩展目录中出现新插件;第二加载模块,用于将所述新插件包括的所有类加载到Java虚拟机中并激活所述新插件,根据所述新插件的相关信息更新所述注册表。所述第一加载模块具体包括第一加载单元,用于将所述扩展目录中存储的每个插件读取到内存中,为所述每个插件建立类加载器,通过所述每个插件对应的类加载器,将所述每个插件中包括的所有类加载到所述Java虚拟机中,并激活所述每个插件;第一存储单元,用于从所述每个插件中读取其自身的ID、接口描述信息和功能描述信息,将所述每个插件的ID、接口描述信息、功能描述信息和类加载器存储在所述注册表中。所述实时监听所述扩展目录,如果监听模块具体包括遍历单元,用于每隔一个周期从所述扩展目录中的第一个插件开始遍历,当遍历到插件时,从所述插件中获取其自身的ID,且从所述扩展目录中获取所述插件的修改时
6间;判断单元,用于查找插件ID与修改时间的对应关系中是否存在包括所述插件的 ID的记录,如果不存在,则所述插件为新插件;如果存在,则判断所述获取的修改时间是否与所述记录中存储的修改时间相同,如果不相同,则所述插件为新插件。如果所述新插件为新版本插件,所述第二加载模块具体包括第二加载单元,用于从所述扩展目录中将所述新插件读取到内存中,为所述新插件建立类加载器,通过所述类加载器将所述新插件中包括的所有类加载到所述Java虚拟机中,并激活所述新插件;查找单元,用于从所述新插件中读取其自身的ID和接口描述信息,从所述注册表中查找所述新新件的ID对应的接口描述信息和类加载器;更新单元,用于将所述查找的接口描述信息和类加载器分别更新为所述读取的接口描述信息和所述建立的类加载器。如果所述新插件为新功能插件,所述第二加载模块具体包括第三加载单元,用于从所述扩展目录中将所述新插件读取到内存中,为所述新插件建立类加载器,通过所述类加载器将所述新插件中包括的所有类加载到所述Java虚拟机中,并激活所述新插件;第二存储单元,用于从所述新插件中读取其自身的ID、接口描述信息和功能描述信息,将所述新插件的ID、接口描述信息、功能描述信息和类加载器存储在所述注册表中。所述装置还包括删除模块,用于如果监听出从所述扩展目录中现删除插件,获取所述删除的插件的ID,从所述注册表中删除包括所述ID的记录,通过垃圾回收器回收所述删除的插件。通过实时监听扩展目录,当监听出新插件时,为新插件建立新类加载器,通过类加载器将新插件中包括的所有类加载到Java虚拟机中以及激活新插件。其中,由于将新插件加载到Java虚拟机中,且激活新插件,从而无需重新初始化软件也可以直接运行新插件, 另外,用户需要加载插件时,只要将新插件存放到扩展目录中,给用户使用带来了很大的方便,且在加载插件时完全脱离Eclipse平台。


图1是本发明实施例1提供的一种加载插件的方法流程图;图2是本发明实施例2提供的一种加载插件的方法流程图;图3是本发明实施例3提供的一种加载插件的装置示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。实施例1如图1所示,本发明实施例1提供了一种加载插件的方法,包括步骤101 当软件初始化时,加载扩展目录中的每个插件,将每个插件的ID和相关
信息存储在注册表中;
其中,插件的相关信息至少包括插件的ID、接口描述信息、功能描述信息和类加载器;步骤102 实时监听扩展目录,如果监听出扩展目录中出现新插件,则执行步骤 103 ;其中,新插件可以为新版本插件或新功能插件,用户将需要加载的新插件先存入在内存中。步骤103 将新插件包括的所有类加载到Java虚拟机中并激活新插件,根据新插件的相关信息更新注册表。在本发明实施例中,通过实时监听扩展目录,当监听出新插件时,为新插件建立新类加载器,通过类加载器将新插件中包括的所有类加载到Java虚拟机中以及激活新插件。 如此,当加载插件时,无需重新初始化软件也可以直接运行新插件,另外,用于需要加载插件时,只要将新插件加载到扩展目录中,给用户使用带来了很大的方便,且在加载插件时完全脱离Eclipse平台。实施例2如图2所示,本发明实施例2提供了一种加载插件的方法,包括步骤201 当初始化软件时,加载扩展目录中的每个插件,并将每个插件的相关信息存储在注册表中;其中,插件是一个独立的功能模块,当需要扩展软件的某项功能时,只需要加载实现该功能的插件。扩展目录为硬盘根目录下的一个子目录,用于存储插件以及插件对应的修改时间。具体地,当软件初始化时,按如下的步骤(1)-(6)加载扩展目录中的每个插件,并将每个插件的相关信息存储在注册表中,包括(1)设置指针指向扩展目录中的第一个插件;其中,在本实施例中,插件是通过Java编程语言编写的程序,并以文件的形式存在。因此,插件以文件的形式存储在扩展目录中。其中,插件由多个类和元标注组成,每个插件都有一个专用于实现接口功能的类, 即为该插件的接口。元标注中包括接口描述信息、功能描述信息和插件的ID等,元标注中的接口描述信息用于描述插件中的哪个类具有接口功能,功能描述信息为插件实现的功能的名称,例如,对于一个实现复制功能的插件,存储在元标注中的功能描述信息为该插件实现功能的名称,即复制功能。(2)从扩展目录中将指针指向的插件读取到内存中,为该插件建立一个类加载器;其中,只有在内存中才能运行插件中的数据以及对该插件进行操作。因此,需要将存储在扩展目录中的插件读取到内存中。(3)通过类加载器将该插件中包括的所类加载到Java虚拟机中;其中,在Java编程语言中,通过Java虚拟机运行每个类,因此,将该插件中包括的每个类加载到Java虚拟机中,就可以通过Java虚拟机运行该插件,从而实现该插件的功能。(4)从该插件中的元标注中读取功能描述信息、接口描述信息和该插件的ID,将该插件的ID、读取的接口描述信息、功能描述信息和建立的类加载器作为其自身的相关信息,并存储在注册表中;其中,在本实施例中,注册表用于存储插件的ID、功能描述信息、接口描述信息和类加载器的对应关系,如表1所示。例如,假设该插件为实现复制功能的插件,在该插件的元标注中,插件的ID为 ID1,接口描述信息为interface,功能描述信息为复制。其中,interface为实现接口功能的类的类名。另外,为该插件建立一个类加载器为类加载器1。然后再将该插件的ID1、功能描述信息“复制”、接口描述信息“interface”以及建立的类加载器1存储在如表1的注册表中。表 权利要求
1.一种加载插件的方法,其特征在于,包括当软件初始化时,加载扩展目录中的每个插件,将所述每个插件的相关信息存储在注册表中,所述相关信息至少包括插件的ID、接口描述信息、功能描述信息和类加载器;实时监听所述扩展目录,如果监听出所述扩展目录中出现新插件;将所述新插件包括的所有类加载到Java虚拟机中并激活所述新插件,根据所述新插件的相关信息更新所述注册表。
2.如权利要求1所述的方法,其特征在于,所述加载扩展目录中的每个插件,将所述每个插件的相关信息存储在注册表中,具体包括将所述扩展目录中存储的每个插件读取到内存中,为所述每个插件建立类加载器,通过所述每个插件对应的类加载器,将所述每个插件中包括的所有类加载到所述Java虚拟机中,并激活所述每个插件;从所述每个插件中读取其自身的ID、接口描述信息和功能描述信息,将所述每个插件的ID、接口描述信息、功能描述信息和类加载器存储在所述注册表中。
3.如权利要求1所述的方法,其特征在于,所述实时监听所述扩展目录,如果监听出所述扩展目录中出现新插件,具体包括每隔一个周期从所述扩展目录中的第一个插件开始遍历,当遍历到插件时,从所述插件中获取其自身的ID,且从所述扩展目录中获取所述插件的修改时间;查找插件ID与修改时间的对应关系中是否存在包括所述插件的ID的记录,如果不存在,则所述插件为新插件;如果存在,则判断所述获取的修改时间是否与所述记录中存储的修改时间相同,如果不相同,则所述插件为新插件。
4.如权利要求1所述的方法,其特征在于,如果所述新插件为新版本插件,所述将所述新插件包括的所有类加载到Java虚拟机中并激活所述新插件,根据所述新插件的相关信息更新所述注册表,具体包括从所述扩展目录中将所述新插件读取到内存中,为所述新插件建立类加载器,通过所述类加载器将所述新插件中包括的所有类加载到所述Java虚拟机中,并激活所述新插件;从所述新插件中读取其自身的ID和接口描述信息,从所述注册表中查找所述新插件的ID对应的接口描述信息和类加载器;将所述查找的接口描述信息和类加载器分别更新为所述读取的接口描述信息和所述建立的类加载器。
5.如权利要求1所述的方法,其特征在于,如果所述新插件为新功能插件,所述将所述新插件包括的所有类加载到Java虚拟机中并激活所述新插件,根据所述新插件的相关信息更新所述注册表,具体包括从所述扩展目录中将所述新插件读取到内存中,为所述新插件建立类加载器,通过所述类加载器将所述新插件中包括的所有类加载到所述Java虚拟机中,并激活所述新插件;从所述新插件中读取其自身的ID、接口描述信息和功能描述信息,将所述新插件的 ID、接口描述信息、功能描述信息和类加载器存储在所述注册表中。
6.如权利要求1-5任意一项权利要求所述的方法,其特征在于,如果监听出从所述扩展目录中删除插件,则所述方法还包括获取所述删除的插件的ID,从所述注册表中删除包括所述ID的记录,通过垃圾回收器回收所述删除的插件。
7.一种加载插件的装置,其特征在于,所述装置包括第一加载模块,用于当软件初始化时,加载扩展目录中的每个插件,将所述每个插件的相关信息存储在注册表中,所述相关信息至少包括插件的ID、接口描述信息、功能描述信息和类加载器;实时监听模块,用于实时监听所述扩展目录,如果监听出所述扩展目录中出现新插件;第二加载模块,用于将所述新插件包括的所有类加载到Java虚拟机中并激活所述新插件,根据所述新插件的相关信息更新所述注册表。
8.如权利要求7所述的装置,其特征在于,所述第一加载模块具体包括第一加载单元,用于将所述扩展目录中存储的每个插件读取到内存中,为所述每个插件建立类加载器,通过所述每个插件对应的类加载器,将所述每个插件中包括的所有类加载到所述Java虚拟机中,并激活所述每个插件;第一存储单元,用于从所述每个插件中读取其自身的ID、接口描述信息和功能描述信息,将所述每个插件的ID、接口描述信息、功能描述信息和类加载器存储在所述注册表中。
9.如权利要求7所述的装置,其特征在于,所述实时监听模块具体包括遍历单元,用于每隔一个周期从所述扩展目录中的第一个插件开始遍历,当遍历到插件时,从所述插件中获取其自身的ID,且从所述扩展目录中获取所述插件的修改时间;判断单元,用于查找插件ID与修改时间的对应关系中是否存在包括所述插件的ID的记录,如果不存在,则所述插件为新插件;如果存在,则判断所述获取的修改时间是否与所述记录中存储的修改时间相同,如果不相同,则所述插件为新插件。
10.如权利要求7所述的装置,其特征在于,如果所述新插件为新版本插件,所述第二加载模块具体包括第二加载单元,用于从所述扩展目录中将所述新插件读取到内存中,为所述新插件建立类加载器,通过所述类加载器将所述新插件中包括的所有类加载到所述Java虚拟机中, 并激活所述新插件;查找单元,用于从所述新插件中读取其自身的ID和接口描述信息,从所述注册表中查找所述新插件的ID对应的接口描述信息和类加载器;更新单元,用于将所述查找的接口描述信息和类加载器分别更新为所述读取的接口描述信息和所述建立的类加载器。
11.如权利要求7所述的装置,其特征在于,如果所述新插件为新功能插件,所述第二加载模块具体包括第三加载单元,用于从所述扩展目录中将所述新插件读取到内存中,为所述新插件建立类加载器,通过所述类加载器将所述新插件中包括的所有类加载到所述Java虚拟机中, 并激活所述新插件;第二存储单元,用于从所述新插件中读取其自身的ID、接口描述信息和功能描述信息, 将所述新插件的ID、接口描述信息、功能描述信息和类加载器存储在所述注册表中。
12.如权利要求7-10任意一项权利要求所述的装置,其特征在于,所述装置还包括删除模块,用于如果监听出从所述扩展目录中现删除插件,获取所述删除的插件的ID,从所述注册表中删除包括所述ID的记录,通过垃圾回收器回收所述删除的插件。
全文摘要
本发明公开了一种加载插件的方法及装置,属于计算机领域。所述方法包括当软件初始化时,加载扩展目录中的每个插件,将所述每个插件的相关信息存储在注册表中,所述相关信息至少包括插件的ID、接口描述信息、功能描述信息和类加载器;实时监听所述扩展目录,如果监听出所述扩展目录中出现新插件;将所述新插件包括的所有类加载到Java虚拟机中并激活所述新插件,根据所述新插件的相关信息更新所述注册表。所述装置包括第一加载模块、实时监听模块和第二加载模块。本发明能够给用户使用带来方便以及加载新插件后可直接运行新插件并无需重新初始化。
文档编号G06F9/445GK102214109SQ20101016316
公开日2011年10月12日 申请日期2010年4月8日 优先权日2010年4月8日
发明者陈锐渠 申请人:深圳市金蝶中间件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1