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

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

【技术实现步骤摘要】

本专利技术涉及JAVA
,具体地,涉及一种实现软件产品客户化的方法及设备
技术介绍
在软件开发过程中,软件开发企业总是倾向于产品化的开发方法,这样可以有效减少开发测试的时间,降低开发成本,加快开发速度。但软件产品应用于具体的客户时,并不能完全满足客户的要求,客户总是会提出各种个性化的需求。为了实现客户化需求,在一般的开发方案中一般有如下的解决办法:(I)对于需要客户化的部分复制出多个版本,然后通过配置参数来解决不同客户的需要,同时还能只维护一个产品序列。这种方法往往随着客户的增加使产品代码的复杂性成倍增加。(2)通过良好的设计模式,在设计产品时尽可能的考虑客户的各种需求,引导客户采用自己的方式来实现。这种方法要求软件企业对领域模型具备非常强的理解。另外,在基于类似HIBERNATE的框架开发时,类似数据库映射的文件不容易被动态替换。
技术实现思路
本专利技术的目的是提供一种实现软件产品客户化的方法及设备,其可实现软件产品零耦合地客户化。为了实现上述目的,本专利技术提供一种实现软件产品客户化的方法,该方法包括:接收对第一包内的一类文件进行加载的请求;以及在客户包内搜索所述类文件,并执行以下操作中的至少一者:如果所述客户包内不存在所述类文件,则使用所述第一包内的类文件创建类对象;及如果所述客户包内存在所述类文件,则判断该类文件是否支持动态代理,如果支持,则使用该类文件创建动态代理类文件,并使用该动态代理类文件创建类对象;及如果不支持,则对该类文件进行字节码级的签名修改,并使用修改之后的类文件创建类对象。相应地,本专利技术还提供一种实现软件产品客户化的设备,该设备包括:接收装置,用于接收对第一包内的一类文件进行加载的请求;以及类加载器,用于在客户包内搜索所述类文件,并执行以下操作中的至少一者:如果所述客户包内不存在所述类文件,则使用所述第一包内的类文件创建类对象;及如果所述客户包内存在所述类文件,则判断该类文件是否支持动态代理,如果支持,则使用该类文件创建动态代理类文件,并使用该动态代理类文件创建类对象;及如果不支持,则对该类文件进行字节码级的签名修改,并使用修改之后的类文件创建类对象。通过上述技术方案,对软件产品的类文件加载过程进行监控,在加载类文件时,检查该类文件是否存在对应的客户化类文件,如果存在,则通过动态代理机制或动态更改类字节码的方式来替换软件产品的类文件,实现客户化类文件的加载。藉此,软件产品中的其他类并不知道某个类文件是从其他客户包中引入的,从而实现了零耦合地客户化类文件的动态加载。本专利技术的其他特征和优点将在随后的具体实施方式部分予以详细说明。附图说明附图是用来提供对本专利技术的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本专利技术,但并不构成对本专利技术的限制。在附图中:图1为本专利技术提供的实现软件产品客户化的方法的流程图;以及图2为本专利技术提供的实现软件产品客户化的方法的另一实施方式的流程图。具体实施例方式以下结合附图对本专利技术的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本专利技术,并不用于限制本专利技术。图1为本专利技术提供的实现软件产品客户化的方法的流程图。如图1所示,本专利技术提供了一种实现软件产品客户化的方法,该方法包括:接收对第一包内的一类文件进行加载的请求;以及在客户包内搜索所述类文件,并执行以下操作中的至少一者:如果所述客户包内不存在所述类文件,则使用所述第一包内的类文件创建类对象;及如果所述客户包内存在所述类文件,则判断该类文件是否支持动态代理,如果支持,则使用该类文件创建动态代理类文件,并使用该动态代理类文件创建类对象;及如果不支持,则对该类文件进行字节码级的签名修改,并使用修改之后的类文件创建类对象。藉此,可实现零耦合地客户化类文件的动态加载。为便于理解,以下以具体实施情形为例进行说明。首先,JAVA虚拟机请求类加载器加载A包下的类文件Al.class。类加载器首先在客户包custom.A下搜索所述类文件Al.class。如果没有在客户包custom.A下搜素到类文件Al.class,则直接使用A包下的类文件Al.class来创建类对象;如果在客户包custom.A下搜索到类文件Al.class,则获取该类文件Al.class的内容,并判断该类文件Al.class是否支持动态代理。如果支持动态代理,则使用该类文件Al.class创建动态代理类文件(该动态代理类文件的方法定义都直接调用客户包custom.A下的类文件Al.class中的方法),之后使用该动态代理类文件创建类对象;如果客户包custom.A下的类文件Al.class不支持动态代理,则对该类文件Al.class进行字节码级的签名修改(该修改包括对所述类文件中的类、方法、实例变量、局部变量的签名进行修改),以符合A包下的类文件Al.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 数据库映射文件,则这个项目下需要增加如下两个文件:(I) 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数据库映射文件的基础上增加了所述特殊的信息项。通过这种简单的扩展即可实现了这个酒店的特殊需求。而且,这种客户化的过程并没有对酒店管理产品做任何本文档来自技高网...

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

【技术特征摘要】
1.一种实现软件产品客户化的方法,该方法包括: 接收对第一包内的一类文件进行加载的请求;以及 在客户包内搜索所述类文件,并执行以下操作中的至少一者: 如果所述客户包内不存在所述类文件,则使用所述第一包内的类文件创建类对象;及 如果所述客户包内存在所述类文件,则判断该类文件是否支持动态代理, 如果支持,则使用该类文件创建动态代理类文件,并使用该动态代理类文件创建类对象;及 如果不支持,则对该类文件进行字节码级的签名修改,并使用修改之后的类文件创建类对象。2.根据权利要求1所述的方法,其中,所述对类文件进行字节码级的签名修改包括对所述类文件中的类、方法、实例变量、局部变量的签名进行修改。3.根据权利要求1或2所述的方法,其中,所述方法还包括: 接收对第二包内的一资源文件进行加载的请求;以及 在所述客户包内搜索所述资源文件,并执行以下操作中的至少一者: 如果所述客户包内不存在所述资源文件,则加载所述第二包内的资源文件;以及 如果所述客户包内存在所述资源文件,则加载所述客户包内的资源文件。4.一种实现软件产品客户...

【专利技术属性】
技术研发人员:高峰朱峰徐卫东
申请(专利权)人:北京东方广视科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1