一种基于元数据和反射机制的aop应用程序中结构冲突的处理方法

文档序号:6330897阅读:254来源:国知局
专利名称:一种基于元数据和反射机制的aop应用程序中结构冲突的处理方法
技术领域
本发明涉及面向方面软件在实际应用中面临的关键问题的检测与处理领域,特别 涉及一种基于元数据和反射机制的AOP应用程序中结构冲突的处理方法。
背景技术
面向方面编程AOP(Aspect-Oriented Programming)[1][2]可以被认为是对面向对 象技术的一种补充和完善,它弥补了面向对象程序设计方法在跨越多个模块行为上的不 足。AOP通过引进Aspect将影响多个类的行为(横切关注点)封装到一个可重用模块中, 从而消除了 OOP引起的代码混乱和分散问题,降低了类与类之间的耦合度,使软件更易于 操作、维护、复用和扩展。目前,随着信息技术的不断发展,面向方面程序设计方法也在向着 实用化的方向发展,但是,AOP在实际应用中也会遇到一些问题,结构冲突问题即是面向方 面软件开发中存在的关键问题之一。结构冲突问题也称为“脆弱的切入点问题”(fragile pointcut problem)[3]M。“脆弱的切入点问题”主要表现为现在Aspect中使用的连接点模 型对于基础程序的演化不够健壮[5]。因为基础程序行为的修改是由于织入所需要的Aspect 引起的,而Aspect中切入点的定义紧紧地依赖于基础程序物理结构信息,这种紧密的耦合 使系统维护变得更加困难,严重地阻碍了软件演化。现阶段,国外的一些系统中已经应用了 Α0Ρ,也有许多研究者对实际应用中出现的 结构冲突问题进行了研究,但是,那些解决方案存在如下一些问题1)提高了 Aspect的可 重用性,减少了发生结构冲突的可能性,但没有阐述具体的实现方法[6] ;2)检测出冲突后, 需要手工进行修改,没有实现软件体系结构的自适应性[3] ;3)开发了相关分析工具,但是 不能证明该工具是否具有有效性[7]。在国内,我们针对AOP应用程序中出现的结构冲突问 题作了大量的研究工作,并且提出了一些解决该问题的方法[8][9][1°][11][12]。文献[9]提出了 一种基于反射机制的方法,它把反射机制中的元层作为基础程序和Aspect中定义的切入 点之间的中间层,根据基础程序结构变更前的相关物理信息,自动生成元层程序,以此实现 连接点的自动匹配。在该方法中,元层程序定义与基础程序演化前的物理结构信息紧密耦 合,从较低的层次实现了基础程序结构和切入点定义的解耦。但是,对于较大规模的面向方面软件,我们需要定义基础程序的逻辑结构,在更高 的层次上(语义级)实现基础程序和切入点定义的解耦,从体系结构层面解决AOP应用程 序中的结构冲突问题。参考文献[1] Kiczales, G. , Lamping, J. , Menhdhekar, Α. , etal. Aspect oriented programming[C] · In-Proceedings of EC00P' 97, Number 1241 in Lecture Notes in Computer Science, Springer Verlag,1997,220-242.[2] Elrad, Τ. , R. Fi Iman, A. Bader, etal. Aspect-Oriented Programming [J]. Comm. ACM,2001,44(10), special issue.
[3]Koppen, C.,Stoerzer, M. Pcdiff :Attacking the fragile pointcut prob1 em[J] . In :First EuropeanInteractive Workshop on Aspects in Software (EIWAS) ,2004.[4]Andy Kellens, Kim Mens,Johan Brichau,etal. Managing the Evolution of Aspect-OrientedSoftware with Model-based Pointcuts[C]. In Proceedings of the 20th European Conference onObject-Oriented Programming(ECOOP' 06),2006.[5]Walter Cazzola, Sonia Pini, Massimo Ancona.AOP for Software Evolution :A Design OrientedApproach[C]. Proceedings of the 2005 ACM symposium on applied computing,2005,1346-1350.[6]A.Beugnard.How to make Aspects re-usable, a Proposition [C]. In Proceedings of theAspect—Oriented Programming Workshop at EC00P99,1999.[7]MaximiIian Storzer and Jurgen Graf. Using Pointcut Delta Analysis to Support Evolution ofAspect-Oriented Software[C]. In Proceedings of the 21st IEEE International Conference onSoftware Maintenance (ICSM' 05),2005,653-656.[8] Hongyin, Hu, Chengwan, He,Zheng,Li. An AOP Framework and Its Implementation Based onConceptual Model[C]. 2009 Second ISECS International Colloquium on Computing,Communication,Control,and Management,CCCM 2009,1 233-236.[9]Chengwan He,Lianlian CaoiKeqing He. A Reflection-based AOP Framework for SupportingSoftware Evolution [J]. “ Software Engineering and Complex Network,,special issue, Dynamics ofContinuous, Discrete and Impulsive Systems Series B Applications & Algorithms,2007,14(S6) :259_264.[10]Chengwan He,Zheng Li,Keqing He. Using Conceptual Model and Reflection Mechanism toResolve The Structufal Conflict in AOP Application[C]. In Proceedings of 2008 InternationalConference on Computer Science and Software Engineering,2008,2 :77-80.[11] Chengwan He,Zheng Li,Keqing He. Towards Trusted Aspect Composition[C]. In Proceedingsof IEEE 8th International Conference on Computer and Information Technology Workshops,2008,643—648·[12]Chengwan He, Zheng Li, Ming Wan. An Object-Based AOP Model and Its Implementation[C].PACIIA 2008,2 :968_971·

发明内容
本发明所要解决的问题是针对上述现有技术而提出一种基于元数据和反射机制 的AOP应用程序中结构冲突的处理方法,用于解决由于基础程序演化而导致的连接点错配 问题。本发明为解决上述提出的问题所釆用解决方案为一种基于元数据和反射机制的 AOP应用程序中结构冲突的处理方法,其特征在于包括有以下步骤1)以反射体系结构为基础,把反射体系结构中的元层当作基础程序和Aspect的中间层,以此实现切入点的定义和基础程序结构的解耦;2)为基础程序中需要反射的类或方法创建用于描述概念层中与基础程序对应的 逻辑信息、物理信息以及两者之间映射关系的XML文件;3)根据XML文件中的物理信息,使用Java Annotation为基础程序添加标注或更 新标注;4)若基础程序的结构发生了变化,则根据XML文件中的逻辑信息,更新与逻辑信 息对应的物理信息;5)根据XML文件中的物理信息与逻辑信息,由转换程序自动生成元层程序,由元 层程序完成反射体系结构中精化与反射的实现。按上述方案,所述的由元层程序完成反射体系结构中精化与反射的实现步骤为(1)客户程序发送给基本对象的消息被基本对象的子对象截取,截取的功能由元 层程序(即元对象)自动完成;(2)基本对象的子对象将调用元对象时所需的实际参数封装后保存到类 MetaObjectFactory 中;(3)基本对象的子对象执行调用元对象的操作;(4)元对象从类MetaObjectFactory中获取调用基础程序中反射方法的参数信 息;(5)元对象根据已经获取的参数信息执行相应的操作,包括所需的Aspect代码的 执行以及基本层中反射方法的调用;(6)把元对象操作的执行结果保存到类MetaObjectFactory中;(7)基本对象重新获得控制权后,从类MetaObjectFactory中获取相应的执行结果。按上述方案,在步骤3)添加标注或更新标注的过程中,概念层中的物理信息和基 础程序的结构信息需保持一致。按上述方案,在步骤4)更新物理信息的过程中,概念层中的逻辑信息和基础程序 中的逻辑信息需保持一致。按上述方案,所述的切入点的定义是使用与基础程序中反射类或反射方法相关的 物理信息对应的逻辑信息,为了与切入点中定义的连接点相匹配,生成的元对象及其方法 的名称使用逻辑信息。按上述方案,在步骤(5)元对象执行相应操作的过程中,将原来织入到基本对 象中的Aspect织入到相应的元对象中,根据织入的Aspect不同类型(before/after advice),由元对象来控制基本对象的执行。按上述方案,在步骤2)中,如果基础程序中的类或方法没有使用元数据定义其逻 辑信息,则转换程序不会生成与之对应的元层程序。本发明的有益效果在于本发明使用Java annotation定义基础程序逻辑信息,而且程序执行时可根据具 体需求选择是否需要导入反射机制以执行对基础程序的转换操作,并且可以灵活的选择反 射粒度大小,使得程序的执行方式比较灵活;使用XML描述概念模型,容易理解,操作简单; 由程序员决定基础程序中哪些类或者方法需要反射,然后给这些类或方法添加标注(元数据),以支持有意识的连结点匹配;把反射体系结构中的元层作为基础程序和Aspect的中 间层,实现了两者间的解耦,提高了 Aspect的可重用性,促进了软件演化,有利于构建可适 应的AOP系统;程序员只需要在一种软件编程环境或AOP语言下工作,没有AOP语言的限定 要求,使用方法上具有更强的通用性。


图1是切入点定义和基础程序结构的解耦。图2是基于元数据和反射机制的结构冲突问题解决方案。图3是反射体系结构中精化和反射的实现。
具体实施例方式下面结合实施例对本发明作进一步说明,但不能作为对本发明的限定。如附图1,2所示,本发明包括以下步骤(1)以反射体系结构为基础,把反射体系结构中的元层当作基础程序和Aspect的 中间层(概念层),以此实现切入点定义和基础程序结构的解耦;所述的切入点的定义是使 用与基础程序中反射类或反射方法相关的物理信息对应的逻辑信息,为了与切入点中定义 的连接点相匹配,生成的元对象及其方法的名称使用逻辑信息;(2)为基础程序中需要反射的类或方法(称为反射类或反射方法)创建用于描述 概念层中与之对应的逻辑信息、物理信息以及两者之间映射关系的XML文件;如果基础程 序中的类或方法没有使用元数据定义其逻辑信息,则转换程序不会生成与之对应的元层程 序;(3)根据XML文件中的物理信息,使用表1定义的Java Annotation为基础程序添 加标注(元数据),若标注已存在,则更新标注;添加标注或更新标注的过程中,概念层中的 物理信息和基础程序的结构信息需保持一致;(4)若基础程序的结构发生了变化,则根据XML文件中的逻辑信息,更新与逻辑信 息对应的物理信息;更新物理信息的过程中,概念层中的逻辑信息和基础程序中的逻辑信
息需保持一致;(5)根据XML文件中的物理信息与逻辑信息,由转换程序自动生成元层程序,由元 层程序完成反射体系结构中精化与反射的实现。表1用于描述基础程序逻辑信息的标注标注的定义 @Retention(RetentionPolicy.RUNTIME) (^interface LogicalClassInfo { String classname(), String packagenameQ;
@Retention(RetentionPolicy.RUNTIME) @interface LogicalMethodInfo { String classname(); String modifierQ; String returntype(); String name();
}
@Retention(RetentionPolicy.RUNTIME)
@interface reflect { }
相关描述适用范围
classname:反射类的逻辑类名 packagename:反射类所在软件 类
包的逻辑包名
classname:反射类的逻辑类名 modifier:反射方法的逻辑访问 修饰符、
returntype:反射方法的逻辑返 施
回值类型
name:反射方法的逻辑方法名
当基础程序中的类或方法有可 能发生变更时使用该标注描述类和方法 相应的逻辑信息参见附图3,为了有效地实现该方法,本发明提供了自动生成元层程序的转换程 序,由元层程序完成反射体系结构中精化与反射的实现步骤为(5. 1)客户程序(Client)发送给基本对象(反射类对象)的消息(方法调用)被 基本对象的子对象截取,截取的功能由元层程序自动完成;(5. 2)基本对象的子对象将调用元对象时所需的实际参数(物理信息)封装后保 存到类 MetaObjectFactory 中;(5. 3)基本对象的子对象执行调用元对象的操作;(5. 4)元对象从类MetaObjectFactory中获取调用基础程序中反射方法的相关参 数信息;(5.5)元对象根据已经获取的参数信息执行相应的操作,包括所需的Aspect代 码的执行以及基本层中反射方法的调用;元对象执行相应操作的过程中,将原来织入到基 本对象中的Aspect织入到相应的元对象中,根据织入的Aspect不同类型(before/after advice),由元对象来控制基本对象的执行。(5. 6)把元对象操作的执行结果返回并保存到类MetaObjectFactory中;(5. 7)基本对象(反射类子类)重新获得控制权后,从类MetaObjectFactory中获 取相应的执行结果。本发明提供解决方案的理论基础以便理解横切关注点是与系统的核心业务无 关,却为业务模块所共同调用的逻辑或责任,其实现横跨多个核心关注点。Aspect (方面) 是横切关注点的模块化,封装了“横切关注点”的实现代码,类似于00P中定义的一个类,通 常由切入点和通知组成。切入点是一组连接点的集合,本质上是一个捕获连接点的结构,类 似于00P中的方法声明。而连结点是程序流中的一个特定的执行点,在该点处织入方面代 码。通知是切入点的执行代码,是执行“方面”的具体逻辑,类似于方法的具体实现。元数 据(Metadata),即“关于数据的数据”,是对数据资源的一种抽象描述。
8
权利要求
一种基于元数据和反射机制的AOP应用程序中结构冲突的处理方法,其特征在于包括有以下步骤1)以反射体系结构为基础,把反射体系结构中的元层当作基础程序和Aspect的中间层,以此实现切入点的定义和基础程序结构的解耦;2)为基础程序中需要反射的类或方法创建用于描述概念层中与基础程序对应的逻辑信息、物理信息以及两者之间映射关系的XML文件;3)根据XML文件中的物理信息,使用Java Annotation为基础程序添加标注或更新标注;4)若基础程序的结构发生了变化,则根据XML文件中的逻辑信息,更新与逻辑信息对应的物理信息;5)根据XML文件中的物理信息与逻辑信息,由转换程序自动生成元层程序,由元层程序完成反射体系结构中精化与反射的实现。
2.按权利要求1所述的基于元数据和反射机制的AOP应用程序中结构冲突的处理方 法,其特征在于所述的由元层程序完成反射体系结构中精化与反射的实现步骤为(1)客户程序发送给基本对象的消息被基本对象的子对象截取,截取的功能由元层程 序自动完成;(2)基本对象的子对象将调用元对象时所需的实际参数封装后保存到类 MetaObjectFactory 中;(3)基本对象的子对象执行调用元对象的操作;(4)元对象从类MetaObjectFactory中获取调用基础程序中反射方法的参数信息;(5)元对象根据已经获取的参数信息执行相应的操作,包括所需的Aspect代码的执行 以及基本层中反射方法的调用;(6)把元对象操作的执行结果保存到类MetaObjectFactory中;(7)基本对象重新获得控制权后,从类MetaObjectFactory中获取相应的执行结果。
3.按权利要求1所述的基于元数据和反射机制的AOP应用程序中结构冲突的处理方 法,其特征在于在步骤3)添加标注或更新标注的过程中,概念层中的物理信息和基础程序 的结构信息需保持一致。
4.按权利要求1所述的基于元数据和反射机制的AOP应用程序中结构冲突的处理方 法,其特征在于在步骤4)更新物理信息的过程中,概念层中的逻辑信息和基础程序中的逻 辑信息需保持一致。
5.按权利要求1所述的基于元数据和反射机制的AOP应用程序中结构冲突的处理方 法,其特征在于所述的切入点的定义是使用与基础程序中反射类或反射方法相关的物理信 息对应的逻辑信息,为了与切入点中定义的连接点相匹配,生成的元对象及其方法的名称 使用逻辑信息。
6.按权利要求2所述的基于元数据和反射机制的AOP应用程序中结构冲突的处理 方法,其特征在于在步骤(5)元对象执行相应操作的过程中,将原来织入到基本对象中的 Aspect织入到相应的元对象中,根据织入的Aspect不同类型,由元对象来控制基本对象的 执行。
7.按权利要求1所述的基于元数据和反射机制的AOP应用程序中结构冲突的处理方法,其特征在于在步骤2)中,如果基础程序中的类或方法没有使用元数据定义其逻辑信 息,则转换程序不会生成与之对应的元层程序。
全文摘要
本发明涉及一种基于元数据和反射机制的AOP应用程序中结构冲突的处理方法,包括有以下步骤1)把反射体系结构中的元层当作基础程序和Aspect的中间层;2)为基础程序中需要反射的类或方法创建用于描述概念层中与基础程序对应的逻辑信息、物理信息以及两者之间映射关系的XML文件;3)基础程序添加标注或更新标注;4)根据XML文件中的逻辑信息,更新与逻辑信息对应的物理信息;5)由转换程序自动生成元层程序,由元层程序完成反射体系结构中精化与反射的实现。本发明的有益效果在于可以灵活的选择反射粒度大小,程序的执行方式比较灵活,没有AOP语言的限定要求,使用方法上具有更强的通用性。
文档编号G06F9/44GK101930365SQ20101026284
公开日2010年12月29日 申请日期2010年8月26日 优先权日2010年8月26日
发明者何成万, 余秋惠, 姚峰, 张慧, 张立军, 李征, 胡宏银 申请人:武汉工程大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1