一种组件构建方法和装置制造方法及图纸

技术编号:3855330 阅读:188 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种组件构建方法和装置,该方法包括:确定循环依赖环路中作为切割点的第一组件;为作为切割点的第一组件创建对应的临时组件;利用第一组件对应的临时组件,构建循环依赖环路中依赖于第一组件的第二组件;从第二组件开始,按照被依赖关系依次构建循环依赖环路中的其他组件,直至第一组件构建完成;利用第一组件更新第二组件的构建信息。本发明专利技术能够正确的构建出循环依赖环路中的组件。

【技术实现步骤摘要】

本专利技术涉及软件
,特别是涉及-种支持循环依赖的组件构建方法 和装置。
技术介绍
面向组件的开发是面向服务开发的基础,随着SOA(面向服务的体系结构) 的推进,系统的组件化过程要求越来越迫切。基于这种需求,大规模软件系统 越来越需要一个支持组件化思想的开发、运行和管理框架,而组件之间的关系 管理是这一框架的基本功能。组件之间关系的建立,目前主流的技术都是采用 依赖注射(DI: Dependency Injection)的方式实现。按照依赖注射的作用点,其主 要分为创建注射和属性注射。创建注射指在创建组件时建立组件之间的关系, 而属性注射指在组件创建完成后通过组件的属性建立组件之间的关系。无论是 创建注射还是属性注射,在一个复杂的组件关系中不可避免的可能存在依赖环 路。然而,现有的组件系统尚不能安全可靠的支持组件之间的循环依赖关系, 存在不能成功地构建具有循环依赖关系的组件的问题。这样的系统大大约束了 组件系统设计开发的模式,限制了具有复杂组件关系的软件系统的设计开发灵 活度,从而大大影响了软件系统的设计开发效率。
技术实现思路
本专利技术提供一种组件构建方法和装置,能够正确的构建出循环依赖环路中 的组件。为了达到上述目的,本专利技术的技术方案是这样实现的一种组件构建方法,该方法包括A、 确定循环依赖环路中作为切割点的第一组件;B、 为作为切割点的第一组件创建对应的临时组件;C、 利用第一组件对应的临时组件,构建循环依赖环路中依赖于第一组件的 第二组件;D、 从第二组件开始,按照被依赖关系依次构建循环依赖环路中的其他组件, 直至第一组件构建完成;E、 利用第一组件更新第二组件的构建信息。 所述步骤A包括在一个构建线程中,在每一个组件被请求构建时,判断该组件是否是第一 次被请求构建,如果是第一次被请求构建,则继续判断该组件是否存在依赖的组件,如果存在,则请求构建该依赖的组件,返回步骤A;如果不是第一次被请求构建,则确定存在循环依赖环路,并将该组件确定为循环依赖环路中作为切 割点的第一组件。所述歩骤A包括将循环依赖环路中的任意一个组件确定为所述第一组件。 当所述依赖为创建依赖时,所述步骤E包括遍历第二组件的所有字段,使用第一组件替换遍历到的每一个所述临时组件;当所述依赖为属性依赖时,所述步骤E包括以第一组件作为参数,调用第二组件的属性设置方法,把第二组件中的依赖属性的值从所述临时组件替换为第一组件。该方法进一步包括根据依赖关系的特点所需要的补偿逻辑,预先设置针 对创建依赖的第一类型回调函数和针对属性依赖的第二类型回调函数;在歩骤B中,进一步包括在第一组件对应的临时组件中设置对应当前依赖 关系的回调函数注册接口;在歩骤C中进一步包括所述第二组件利用所述临时组件中的回调函数注册接口,注册第一类型回调函数或第二类型回调函数;通过调用第二组件注册的第一类型回调函数或第二类型回调函数执行所述歩骤E。7该方法进一步包括每一个组件在构建时获取了其依赖的组件,判断获取 到的组件是否是临时组件,如果是临时组件,则将所获取的临时组件的信息、 该构建的组件的信息以及对应的补偿方式信息登记到预先设置的补偿组件列表中;第二组件利用补偿组件列表中与其对应的临时组件信息和补偿方式信息,执行所述步骤E。所述步骤B进一步包括在临时组件中创建补偿信息表;所述步骤C进一步包括将依赖于该临时组件的第二组件以及其与临时组件 的依赖关系登记在临时组件的补偿信息表中;对登记在临时组件的补偿信息表中的第二组件,根据登记的依赖关系是创建依赖还是属性依赖执行所述步骤E。当所述第一组件以接口形式对外提供服务时,所述歩骤B包括按照动态代 理方法,产生继承所述第一组件所有暴露的接口的类,该类不包括依赖信息, 将产生的该类作为所述第 一组件对应的临时组件, 当所述第一组件以类形式对外提供服务时,所述步骤B包括按照二进制代 码修改方法,产生继承所述第一组件的类,该类不包括依赖信息,将产生的该 类作为所述第一组件对应的临时组件。在一个构建线程中执行所述步骤A至步骤E;该方法进一步包括为当前的构建线程加一排他锁,在当前构建线程结束 后,解除该排他锁。一种组件构建装置,该装置包括切割点确定模块,用于确定循环依赖环路中作为切割点的第一组件; 临时组件创建模块,用于为所述切割点确定模块确定的第一组件创建对应 的临时组件';构建执行模块,用于利用所述临时组件创建模块创建的临时组件,构建循 环依赖环路中依赖于第一组件的第二组件,并从第二组件开始,按照被依赖关系依次构建循环依赖环路中的其他组件,直至第一组件构建完成;回调补偿模块,用于利用所述构建执行模块构建的第一组件,更新第二组 件的构建信息。所述切割点确定模块,在一个构建线程中,在每一个组件被请求构建时, 判断该组件是否是第一次被请求构建,如果是,则判断该组件是否存在依赖的 组件,如果存在,则请求构建该依赖的组件;如果不是,则确定存在循环依赖 环路,并将该组件确定为循环依赖环路中作为切割点的第一组件。所述回调补偿模块,在当前创建线程中第二组件对第一组件存在创建依赖 时,遍历第二组件的所有字段,使用第一组件替换遍历到的每一个所述临时组 件;在当前创建线程中第二组件对第一组件存在属性依赖时,以第一组件作为 参数,调用第二组件的属性设置方法,把第二组件中的依赖属性的值从所述临 时组件替换为第一组件。所述构建执行模块在创建临时组件时,如果所述第一组件以接口形式对外 提供服务,则按照动态代理方法,产生继承所述第一组件所有暴露的接口的类, 该类不包括依赖信息,将产生的该类作为所述第一组件对应的临时组件;如果 所述第一组件以类形式对外提供服务,则按照二进制代码修改方法,产生继承 所述第一组件的类,该类不包括依赖信息,将产生的该类作为所述第一组件对 应的临时组件。根据本专利技术的方法和装置,在判断出存在循环依赖环路时,通过创建与正 式组件对应的临时组件,使正式组件所直接或间接依赖的组件临时依赖于临时 组件,从而从逻辑上消除循环依赖环路,实现循环依赖切割;并且在构建正式 组件的过程中登记循环依赖补偿信息,然后在正式组件除循环依赖之外的部分 构建完毕之后,再根据登记的循环依赖补偿信息,对该依赖于该正式组件的组 件补充循环依赖切除时丢失的信息,使暂时引用于临时组件的组件引用正式组 件,实现循环依赖补偿。由此,通过在通常的组件构建过程中加入循环依赖切 割和循环依赖补偿处理,本专利技术的组件构建方法和装置,能够提供支持组件之 间的循环依赖关系,可以提高软件系统的设计开发效率。附图说明图1是本专利技术实施例中的组件构建方法的流程图2是一种循环依赖环路的示意图3是本专利技术装置的基本结构示意图。具体实施例方式为了使本专利技术的目的、技术方案和优点更加清楚,下面结合附图和具体实 施例对本专利技术进行详细描述。本专利技术提出了一种组件构建方法,该方法包括确定循环依赖环路中作为 切割点的第一组件;为作为切割点的第一组件创建对应的临时组件;利用第一 组件对应的临时组件,构建循环依赖环路中依赖于第一组件的第二组件;从第 二组件开始,按照被依赖关系依次构建循环依赖环路中的其他组件,直至第一 组件构建完成;利用第一组件更新第二组件的构建信息。可见,在本专利技术中,为作为切割点的第一组件创建临时组件本文档来自技高网...

【技术保护点】
一种组件构建方法,其特征在于,该方法包括: A、确定循环依赖环路中作为切割点的第一组件; B、为作为切割点的第一组件创建对应的临时组件; C、利用第一组件对应的临时组件,构建循环依赖环路中依赖于第一组件的第二组件;  D、从第二组件开始,按照被依赖关系依次构建循环依赖环路中的其他组件,直至第一组件构建完成; E、利用第一组件更新第二组件的构建信息。

【技术特征摘要】

【专利技术属性】
技术研发人员:何冠宇
申请(专利权)人:用友软件股份有限公司
类型:发明
国别省市:11[中国|北京]

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

1