首页> 中国专利> 一种实现软件产品客户化的方法及设备

一种实现软件产品客户化的方法及设备

摘要

本发明公开了一种实现软件产品客户化的方法及设备,该方法包括:接收对第一包内的一类文件进行加载的请求;以及在客户包内搜索所述类文件,并执行以下操作中的至少一者:如果所述客户包内不存在所述类文件,则使用所述第一包内的类文件创建类对象;及如果所述客户包内存在所述类文件,则判断该类文件是否支持动态代理,如果支持,则使用该类文件创建动态代理类文件,并使用该动态代理类文件创建类对象;及如果不支持,则对该类文件进行字节码级的签名修改,并使用修改之后的类文件创建类对象。通过上述技术方案,实现了零耦合地客户化类文件的动态加载。

著录项

  • 公开/公告号CN103176781A

    专利类型发明专利

  • 公开/公告日2013-06-26

    原文格式PDF

  • 申请/专利权人 北京东方广视科技股份有限公司;

    申请/专利号CN201110436019.7

  • 发明设计人 高峰;朱峰;徐卫东;

    申请日2011-12-22

  • 分类号G06F9/44;G06F9/445;

  • 代理机构北京润平知识产权代理有限公司;

  • 代理人肖冰滨

  • 地址 102206 北京市昌平区回龙观北京国际信息产业基地立业路7号

  • 入库时间 2024-02-19 19:24:31

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-03-16

    授权

    授权

  • 2013-07-24

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20111222

    实质审查的生效

  • 2013-06-26

    公开

    公开

说明书

技术领域

本发明涉及JAVA技术领域,具体地,涉及一种实现软件产品客户化的 方法及设备。

背景技术

在软件开发过程中,软件开发企业总是倾向于产品化的开发方法,这样 可以有效减少开发测试的时间,降低开发成本,加快开发速度。但软件产品 应用于具体的客户时,并不能完全满足客户的要求,客户总是会提出各种个 性化的需求。为了实现客户化需求,在一般的开发方案中一般有如下的解决 办法:

(1)对于需要客户化的部分复制出多个版本,然后通过配置参数来解 决不同客户的需要,同时还能只维护一个产品序列。这种方法往往随着客户 的增加使产品代码的复杂性成倍增加。

(2)通过良好的设计模式,在设计产品时尽可能的考虑客户的各种需 求,引导客户采用自己的方式来实现。这种方法要求软件企业对领域模型具 备非常强的理解。

另外,在基于类似HIBERNATE的框架开发时,类似数据库映射的文件 不容易被动态替换。

发明内容

本发明的目的是提供一种实现软件产品客户化的方法及设备,其可实现 软件产品零耦合地客户化。

为了实现上述目的,本发明提供一种实现软件产品客户化的方法,该方 法包括:接收对第一包内的一类文件进行加载的请求;以及在客户包内搜索 所述类文件,并执行以下操作中的至少一者:如果所述客户包内不存在所述 类文件,则使用所述第一包内的类文件创建类对象;及如果所述客户包内存 在所述类文件,则判断该类文件是否支持动态代理,如果支持,则使用该类 文件创建动态代理类文件,并使用该动态代理类文件创建类对象;及如果不 支持,则对该类文件进行字节码级的签名修改,并使用修改之后的类文件创 建类对象。

相应地,本发明还提供一种实现软件产品客户化的设备,该设备包括: 接收装置,用于接收对第一包内的一类文件进行加载的请求;以及类加载器, 用于在客户包内搜索所述类文件,并执行以下操作中的至少一者:如果所述 客户包内不存在所述类文件,则使用所述第一包内的类文件创建类对象;及 如果所述客户包内存在所述类文件,则判断该类文件是否支持动态代理,如 果支持,则使用该类文件创建动态代理类文件,并使用该动态代理类文件创 建类对象;及如果不支持,则对该类文件进行字节码级的签名修改,并使用 修改之后的类文件创建类对象。

通过上述技术方案,对软件产品的类文件加载过程进行监控,在加载类 文件时,检查该类文件是否存在对应的客户化类文件,如果存在,则通过动 态代理机制或动态更改类字节码的方式来替换软件产品的类文件,实现客户 化类文件的加载。藉此,软件产品中的其他类并不知道某个类文件是从其他 客户包中引入的,从而实现了零耦合地客户化类文件的动态加载。

本发明的其他特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本发明的进一步理解,并且构成说明书的一部分,与 下面的具体实施方式一起用于解释本发明,但并不构成对本发明的限制。在 附图中:

图1为本发明提供的实现软件产品客户化的方法的流程图;以及

图2为本发明提供的实现软件产品客户化的方法的另一实施方式的流程 图。

具体实施方式

以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是, 此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发 明。

图1为本发明提供的实现软件产品客户化的方法的流程图。如图1所示, 本发明提供了一种实现软件产品客户化的方法,该方法包括:接收对第一包 内的一类文件进行加载的请求;以及在客户包内搜索所述类文件,并执行以 下操作中的至少一者:如果所述客户包内不存在所述类文件,则使用所述第 一包内的类文件创建类对象;及如果所述客户包内存在所述类文件,则判断 该类文件是否支持动态代理,如果支持,则使用该类文件创建动态代理类文 件,并使用该动态代理类文件创建类对象;及如果不支持,则对该类文件进 行字节码级的签名修改,并使用修改之后的类文件创建类对象。藉此,可实 现零耦合地客户化类文件的动态加载。

为便于理解,以下以具体实施情形为例进行说明。首先,JAVA虚拟机 请求类加载器加载A包下的类文件A1.class。类加载器首先在客户包custom.A 下搜索所述类文件A1.class。如果没有在客户包custom.A下搜素到类文件 A1.class,则直接使用A包下的类文件A1.class来创建类对象;如果在客户包 custom.A下搜索到类文件A1.class,则获取该类文件A1.class的内容,并判断 该类文件A1.class是否支持动态代理。如果支持动态代理,则使用该类文件 A1.class创建动态代理类文件(该动态代理类文件的方法定义都直接调用客 户包custom.A下的类文件A1.class中的方法),之后使用该动态代理类文件创 建类对象;如果客户包custom.A下的类文件A1.class不支持动态代理,则对 该类文件A1.class进行字节码级的签名修改(该修改包括对所述类文件中的 类、方法、实例变量、局部变量的签名进行修改),以符合A包下的类文件 A1.class的签名要求,之后使用修改后的类文件创建类对象。

图2为本发明提供的实现软件产品客户化的方法的另一实施方式的流程 图(为清楚表示,图2仅示出了有关作为非类文件的资源文件加载的流程, 而并未示出图1所示的类文件加载的流程)。如图2所示,所述方法还包括: 接收对第二包内的一资源文件进行加载的请求;以及于所述客户包内搜索所 述资源文件,并执行以下操作中的至少一者:如果所述客户包内不存在所述 资源文件,则加载所述第二包内的资源文件;以及如果所述客户包内存在所 述资源文件,则加载所述客户包内的资源文件。藉此,可实现对零耦合地客 户化资源文件的动态加载。

为便于理解,以下以具体实施情形为例进行说明。首先,JAVA虚拟机 请求类加载器加载A包下的资源文件B。类加载器首先在客户包custom.A下 搜索所述资源文件B。如果没有在客户包custom.A下搜索到资源文件B,则 直接加载A包下的资源文件B;如果在客户包custom.A下搜索到资源文件B, 则获取该资源文件B的内容,并加载该资源文件B。

假设一个酒店管理系统产品定义了酒店管理的通用的领域模型,酒店A 在应用这个软件产品之后要求要求在酒店客户信息中增加一个特殊的信息 项,而这个特殊的信息项只是一个特殊的需求,并不能在产品中包含。此时, 可以为这个酒店专门创建客户化的java项目。假设酒店管理系统产品中的客 户化信息模型类为com.company.hotel.model.Customer.java,使用了 com.company.hotel.model.Customer.hbm.xml数据库映射文件,则这个项目下需 要增加如下两个文件:

(1)custom.com.company.hotel.model.Customer.java,这个文件在 com.company.hotel.model.Customer.java的基础上增加了所述特殊的信息项;以 及

(2)custom.com.company.hotel.model.Customer.hbm.xml数据库映射文件, 这个文件在com.company.hotel.model.Customer.hbm.xml数据库映射文件的基 础上增加了所述特殊的信息项。

通过这种简单的扩展即可实现了这个酒店的特殊需求。而且,这种客户 化的过程并没有对酒店管理产品做任何修改,只需要把客户化的java项目打 包放在产品的类路径下即可生效。

相应地,本发明还提供了一种实现软件产品客户化的设备,该设备包括: 接收装置,用于接收对第一包内的一类文件进行加载的请求;以及类加载器, 用于在客户包内搜索所述类文件,并执行以下操作中的至少一者:如果所述 客户包内不存在所述类文件,则使用所述第一包内的类文件创建类对象;及 如果所述客户包内存在所述类文件,则判断该类文件是否支持动态代理,如 果支持,则使用该类文件创建动态代理类文件,并使用该动态代理类文件创 建类对象;及如果不支持,则对该类文件进行字节码级的签名修改,并使用 修改之后的类文件创建类对象。

其中,所述对类文件进行字节码级的签名修改包括对所述类文件中的 类、方法、实例变量、局部变量的签名进行修改。

其中,所述接收装置还用于接收对第二包内的一资源文件进行加载的请 求;以及所述类加载器还于所述客户包内搜索所述资源文件,并执行以下操 作中的至少一者:如果所述客户包内不存在所述资源文件,则加载所述第二 包内的资源文件;以及如果所述客户包内存在所述资源文件,则加载所述客 户包内的资源文件。

通过上述技术方案,软件产品中的其他类并不知道某个类文件或资源文 件是从其他客户包中引入的,从而实现了零耦合地客户化类文件或资源文件 的动态加载。

以上结合附图详细描述了本发明的优选实施方式,但是,本发明并不限 于上述实施方式中的具体细节,在本发明的技术构思范围内,可以对本发明 的技术方案进行多种简单变型,这些简单变型均属于本发明的保护范围。

另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特 征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必 要的重复,本发明对各种可能的组合方式不再另行说明。

此外,本发明的各种不同的实施方式之间也可以进行任意组合,只要其 不违背本发明的思想,其同样应当视为本发明所公开的内容。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号