




已阅读5页,还剩57页未读, 继续免费阅读
(计算机应用技术专业论文)基于xml描述aop切入点的研究和实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
上海交通大学硕士学位论文 摘要 i 基于 xml 描述 aop 切入点的研究和实现 摘 基于 xml 描述 aop 切入点的研究和实现 摘 要要 面向方面编程(aspect-oriented programming, aop)是一种新的程 序设计方法,旨在解决传统面向对象程序设计对于系统横切关注点的 描述所存在的代码散布和纠缠的问题,使程序具有更好的模块性,可 维护性和扩展性。近年来,随着面向方面编程为越来越多的人接受并 愈发流行,成熟的 aop 语言也不断涌现。目前,绝大多数的 aop 语 言都使用连接点模型(join point model)来描述 aspect 和 class 的关系, 但是对于切入点(pointcut),所有的语言都使用纯文本类型的字符串来 描述,而这会给今后的开发和维护带来一系列问题。 为了解决这些问题,本文提出一种新的切入点描述机制基于 xml 的方面切入点描述语言(xml aspect pointcut description language,xapdl)。xapdl 使用 xml 来表述切入点的具体信息以 及横切关注点和基本关注点之间的关系,最终使得基本关注点和横切 关注点完全分离。本文的参照语言是最为成熟的 aop 语言 aspectj 的 一个子集语言 miniaspectj,其保留了 aop 的核心特性而去除了一些 高级的功能。简化的目的是为了更方便本文的研究和后期的测试验证 上海交通大学硕士学位论文 摘要 ii 工作。基于 xapdl 的理论,本文设计实现了 xapdl 的运行测试工 具 xajdt,其功能是可视化编辑 xapdl 文件并且自动转换 xapdl 为正确的 miniaspectj 程序。 本文通过穷举 xapdl 的所有可能组合来 设计测试用例,并用 xajdt 工具运行,以验证 xapdl 的正确性。 本课题的研究第一次详细的提出了如何用非文本的形式化方法来 描述切入点的具体细节,并针对成熟的 aspectj 的简化子集提出了具 体的解决方案。通过使用 xapdl 和 xajdt,程序员能更有效的进行 面向方面编程的开发和维护,特别是 xajdt,在实际编程环境中的实 用性、健壮性和稳定性都有着不俗的表现。 关键字:关键字:面向方面编程,切入点描述语言,xml 技术 上海交通大学硕士学位论文 abstract iii research and implementation of description of aops pointcuts based on xml abstract aspect oriented programming (aop) is a new programming methodology, which aims to solve code scattering and tangling problems existing in traditional object oriented programming methodology when modeling crosscuting concerns. aop makes programs better modularized, better maintainable, extensible and flexible. in recent years, aop is becoming more and more popular and well known, aop languages become more mature as well. most current aop tools use the join point model (jpm) as the key mechanism to describe the relationships between aspects and classes, but for describing pointcuts, all of them use plain text, which actually causes problems in the development and maintenance phases. to deal with this problem, we propose a novel pointcut description mechanism called xml aspect pointcut description language (xapdl). xapdl uses xml to describle the details of pointcut and the relationship between crosscutiong concern and primary concern, which completely 上海交通大学硕士学位论文 abstract iv separates them. the reference language in the article is a subset language of aspectj, called miniaspectj, which keeps the core features of aop while excluding some advanced features. the reason of simplification is for the convenience of research and future verification work. based on the xapdl theory, we design and implement an tool named xajdt to support xapdl development, which includes an xapdl editor and an xapdl to miniaspectj translator. in the article we verify the correctness of xapdl by exhaustively running all possible combination of xapdl. the paper is the first research on how to describle the details of pointcut in formal method instead of plain text, and put up a detailed solution-xapdl. by using xapdl and xajdt, programmers can more effectively develop and maintain aop languages in real programming environment and the performance of xajdt is quite optimistic. key words: aop, pointcut description language, xml technology 上海交通大学上海交通大学 学位论文原创性声明学位论文原创性声明 本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究工作 所取得的成果。 除文中已经注明引用的内容外, 本论文不包含任何其他个人或集体已经 发表或撰写过的作品成果。 对本文的研究做出重要贡献的个人和集体, 均已在文中以明 确方式标明。本人完全意识到本声明的法律结果由本人承担。 学位论文作者签名:朱奇 日期: 2008 年 3 月 10 日 上海交通大学上海交通大学 学位论文版权使用授权书学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并 向国家有关部门或机构送交论文的复印件和电子版, 允许论文被查阅和借阅。 本人授权 上海交通大学可以将本学位论文的全部或部分内容编入有关数据库进行检索, 可以采用 影印、缩印或扫描等复制手段保存和汇编本学位论文。 保密保密,在 年解密后适用本授权书。 本学位论文属于 不保密 不保密。 (请在以上方框内打“”) 学位论文作者签名:朱奇 指导教师签名:赵建军 日期: 2008 年 3 月 10 日 日期: 2008 年 3 月 10 日 上海交通大学硕士学位论文 第一章 绪论 1 第一章第一章 绪绪 论论 1.1 研究背景研究背景 熟悉 j2ee 框架的程序员都知道, j2ee 应用程序只有部署在 j2ee 容器中才能 运行,那么为什么划分为 j2ee 容器和 j2ee 应用系统? 通过对 j2ee 容器运行机 制的分析, 我们可以发现: 实际上 j2ee 容器分离了一般应用系统的一些通用功能, 例如事务机制、安全机制以及对象池或线程池等性能优化机制。这些功能机制是 每个企业应用系统几乎都需要的,因此可以从具体应用系统中分离出来,形成一 个通用的框架平台。由 j2ee 框架对一个完整程序分离为 j2ee 容器和 j2ee 应用 系统两个方面,我们已经看到一种分散关注的思路 (separation of concerns) 8:将 通用需求功能从不相关类之中分离出来;同时,能够使得很多类共享一个行为, 一旦行为发生变化,不必修改很多类,只要修改这个行为就可以。 之所以需要j2ee框架, 正是因为java作为一种面向对象编程 (object oriented programming)的语言,其本身的缺陷造成的。因为在一个系统中会有许多关注点, 我们可以把这些关注点分成两类:核心关注点7以及横切关注点7。许多横切关注 点,例如日志、验证、资源池、系统管理、性能及存储管理等,一般都会横切许 多核心关注点核心关注点中有对横切关注点的需求。因而,在这种情况下, 在面向对象编程中,类不仅要处理自己的核心关注点,以便实现核心业务逻辑需 求;而且还必须实现横切关注点,以便满足相关的系统级需求。这种关注点的混 合,导致了在具体编程中存在代码分散(code scattering) 11 和代码纠缠(code tangling) 11 这两个主要的问题。 为了解决在面向对象程序设计中这种无法直接描述横切关注点,横切行为跨 越多个编程模块的不足,美国施乐公司帕洛阿尔托研究中心(xerox parc)的 上海交通大学硕士学位论文 第一章 绪论 2 gregoer kiczales 等人21在实践的基础上于 1997 年提出了一种新型程序设计方法 面向方面的程序设计(aspect-oriented programming, aop) 7。面向方面的程 序设计方法认为:软件系统是由许多关注组合而成;核心关注点实现了系统的主 要业务逻辑,构成了系统的主体;横切关注实现了系统中相对独立的功能,横切 在系统的主体框架之上。和其他分离关注点的技术一样,面向方面程序设计的目 标是使设计的代码具有更好的模块性8和结构性,使横切关注点模块化而不是分 散在整个系统中,从而在根本上解决面向对象系统建模时由横切关注所引起的代 码分散和代码纠缠问题。具体来说,面向方面的程序设计是指在设计阶段就将横 切关注从系统中提取出来。在实现阶段,将这些横切关注封装成单独的编程模块 10(方面,aspect) 。最后通过一定的静态或动态编织技术22将这些横切关注代码 自动注入回系统,从而实现了对横切关注点的封装和集中管理。因此,在使用面 向方面思想开发的系统中,开发人员只需分别集中精力实现程序的核心业务逻辑 和系统级别的横切关注点,而不用考虑这两者之间是如何具体联系的其是由 aop 编织机(weaver)22来处理,它会自动把横切关注点织入到系统之中,使最 后得到的代码体现出核心关注和横切关注共同组合而成的行为。因此,面向方面 编程不仅保留了面向对象程序设计方法对核心关注点的封装和重用,还能够非常 有效地对横切关注点进行封装和集中管理。 但是随着对面向方面编程研究的不断深入,我们也发现,aop 也暴露出越来 越多的问题,具体如下: 1) aop 是一种新的编程技术,没有完整的文档,没有得到良好的测试和大 量的实际项目的应用,还需要在实际工作中得到更多的检验。 2) 目前,aop 的开发语言和对应的支持工具还不是很丰富,目前主要有基 于 java 上的 aspectj,而基于 c#和.net 以及其他语言上的开发语言和工具都尚 在研究中。关于 aop 分析、设计过程,设计和分解方面的基本原则,如何调试, 什么是良好的方面模块等都有待进一步研究。 上海交通大学硕士学位论文 第一章 绪论 3 3) aop 的理论支持方面也有待进一步研究。如用什么理论能最好地描述方 面与组件之间的交互等。 4) 破坏了原本 oop 的封装性,这对于程序结果的运行是否符合规范提出了 巨大的挑战。 可见,虽然经过十年的发展,aop 也变得越来越成熟,但是上述的一些 aop 的问题,多少还都未被很好的解决。可以说,随着面向方面编程的不断发展,我 们需要尽快发展新的面向方面编程的语言或者工具来解决上述的面向方面编程的 缺陷。 1.2 研究意义研究意义 由上章节叙述可见,尽管面向方面编程变得越来越成熟,功能也日趋完善, 但是暴露出来的越来越多的问题,让我们开始考虑如何能够更好地解决它们。本 篇论文写作就是基于以下几个思考: 第一, 现在比较流行的面向方面编程的方法,对于切入点的描述都是用普通 字符串来描述的。这样就会存在二义性或者错误的可能。本文试图消除由于普通 字符串描述而带来的诸多问题和弊端。 第二, 最为流行的 aspectj 面向对象编程语言,其对于切入点的描述是放在 每一个方面代码之中的。这样做虽然最利于实现,但是对于基本程序而言方面代 码是透明的同时也是散布13的。透明意味着基本程序不知道横切点将会发生在哪 里,这就导致了程序员若要预测程序执行的结果,必须找到每一个相关横切关注 点,才能知道程序的运行流程;散布则意味着若是对基本程序进行改变,程序员 就得检查所有的相关横切关注点,以确定两者是否匹配,这大大增加了程序员的 工作量。本文试图寻求一种联系面向对象和面向方面两个部分的一个桥梁,来解 决透明和散布的问题。 上海交通大学硕士学位论文 第一章 绪论 4 第三, 面向方面的横切模块会在程序运行时横切基本模块,因此程序的最终 运行结果在编译时是没有办法知道的。因此,面向方面编程的程序其最终运行结 果是否和程序员预期相符合是无法在静态阶段就检验出来。本文试图验证程序的 运行结果是否与编码预期相一致的问题。 对于以上的三个问题,本文认为解决的关键是引用一种新的切入点描述机制 来代替原有的普通字符串来描述切入点的方法。具体的载体可以是 xml,也可以 是其他的方式,其最终的目标是消除面向方面程序在切入点描述上的歧义、散布、 验证的问题,从而使得面向方面的程序能够正确的运行。 1.3 相关工作相关工作 面向方面编程较面向对象编程而言,是一种新的编程范式,也是一种强大的 程序设计方法。 尽管不少研究者和开发人员对于面向方面编程仍持有保留的态度, 但是越来越多的学者和程序员已经加入到了面向方面编程的研究之中。如今,面 向方面编程经过了十年的发展,不论是在理论上还是在实践上都日趋成熟:各种 理论相互碰撞融合,各种工具不断涌现等等;值得一提的是,一些开源项目已经 将面向方面编程的思想融合进了实际开发之中。 从目前国内外的研究情况来看,现在研究的热点方向主要有两个: 1) 更好的语言层面的 aop 支持 2) 更好的工具层面的 aop 支持 基于以上两点,很多国内外的学者在近两年中都做了很多的理论上的研究和 探讨,也取得了一些理论上的成果。具有代表性且也已被广泛接受的有以下几个: 1) xpi (crosscut programming interface) 12 2) crosscutting interface17 3) class-based aop18 上海交通大学硕士学位论文 第一章 绪论 5 下面就具体的说一下,这三者的基本思想和概念 xpi 随着面向方面的语言,例如 aspectj 和其相应的设计方法变得越来越热门, 了 解到底如何才能把 aop 组件放到模块化的程序中使得程序运行的最好变得非常 重要。xpi 全名是横切编程接口(crosscutting programming interface)12,它是一 个纯理论的研究,具体如何实现 xpi,仍有待于后人去研究。使用 xpi 可以有助 于信息隐藏在模块化程序作为模块组合使用时候量化的机制. xpi 是一种新型的 接口:一个是抽象横切关注点的行为,解耦通知部分的代码和被通知部分代码的联 系,并在解耦中,定义一个契约来规范两边的行为。 具体来说的话,就是定义一 个接口,该接口来规范切入点是如何暴露出来的,已经暴露出来之后通知部分和 主程序部分应该如何运作。 crosscutting interface 这是一个基于具体语言层面级别的一个探索,研究的对象是 aspectj 编程语 言。因为 aspectj 作为现在最为流行的 aop 编程语言,所以对它进行一定的设计 模式的探索,还是有比较大的价值的。研究的主要思想是基于 xpi 的,可以说是 一个对于 xpi 的具体实现17:因为 aspectj 由于先天设计的缺陷,使得通知部分 和切入点部分混合在了一起,而 xpi 能够很好的解决这个缺陷。具体的解决方法 就是通过“方面的方面”这个结构,使得一个方面分成了一个抽象层次的方面,其 充当了 xpi 的作用,和一个具象层次的方面,其充当抽象方面的实现。在抽象层 次的方面中,并没有通知部分的 java 代码,有的仅仅是定义一些横切接口。而在 具象方面中,则是对于抽象方面接口的具体实现,该具象方面只负责对于抽象层 次代码的响应,存放的就只是通知部分的 java 代码。由此可见,xpi 的设计思想 在 aspectj 中也得到了非常不错的体现。crosscutting interface 的主要问题是通过 方面的方面这种结构,代码会变得比较冗余,增加了程序员的工作量。该解决方 案是一个对于现有语言的在编程模式上的创新。 上海交通大学硕士学位论文 第一章 绪论 6 class-based aop 表面上,这个理论是摒弃了 aspect 的关键字,并不提及面向方面编程这个术 语;但事实上,该理论扩充了传统 oop 中类的功能,增加了 aspect 的功能在其 中。 它试图用具有方面功能的类来解决所有的问题, 其本质是一个彻底的aop 万事万类都是方面18。这里,方面已经不单单是 oo 的补充,oo 和 ao 彻底融 合在了一起。通过对于每一个类,定义一个抽象的接口,并对这个接口定义一些 规则,比如这个接口会去修饰什么接口,会被什么接口修饰。通过这样的方法, 就让所有的类都是方面,而所有的方面都是类。对于这个方法,编译器已经设计 好了,虽然还没有实现,但是从理论上来说,已经是可行的了。 1.4 论文的主要工作论文的主要工作 本论文的主要工作分成以下几个部分: 首先,对于现存的主流 aop 的语言和具体实现进行研究。在充分研究的前提 下,总结现存主流 aop 语言和工具的相同点和不同点,并指出一些它们共同存在 的问题。 其次,为了方便研究,需要对 aspectj目前最流行的 aop 语言进行分析 和简化,取其一个子集作为本文的研究对象miniaspectj,并提出了其形式化 的 bnf 范式。 而后,在 miniaspectj 的基础上,提出针对以上问题的解决方案用 xml 来描述 aop 切入点的研究xapdl。在这个部分中,解决了如果在理论上将 xapdl 正确地映射到 miniaspectj。 接着,有了理论的支持,本文还开发了支援 xapdl 开发的工具软件。该工 具软件主要的功能是两个,第一是能够图形化的建模 xapdl,即可以用拖拽的画 图形式来编写 xapdl 文件;第二就是能够动态的从 xapdl 生成我们所需要的 上海交通大学硕士学位论文 第一章 绪论 7 miniaspectj 的转换程序。 最后,就是 xapdl 的验证工作。通过分析 xapdl 的 xml schema 和 miniaspectj 的 bnf 语法范式,确定了 21 种可能的组合情况。本文设计了 14 个 测试用例以涵盖这 21 种所有可能的组合情况,经过测试后,本文得到了一个不错 的实验结果。 纵观全文,本文的创新点主要有两个: 第一, 用 xml 来描述 aop 语言的切入点部分是创新的, 之前一些主流的工 具都是使用纯文本的字符串来描述的。 第二, 开发了一个图形化建模 xapdl 的工具软件,并可以生成可执行程序 的工具软件。 1.5 论文的组织结构论文的组织结构 本论文的组织结构如下: 第一章介绍了下本文的总体情况,指出了本文的研究背景、研究意义等等; 第二章介绍了 aop 领域的一些主要的概念,并比较了现存的 aop 的语言和工具 情况,在理论上指出了问题的所在;第三章用一个贯穿全文的实例来说明上一章 所提出的问题; 第四章介绍了 xapdl 的理论部分, 在这部分, 涵盖了 miniaspectj 等概念;第五章主要讲了支援 xapdl 的工具是如何设计和实现的;第六章是本 文的实验部分,通过跑一些具有代表性的例子,来验证 xapdl 的正确性和可用 性;第七章是对全文的一个总结。 上海交通大学硕士学位论文 第二章 概述 8 第二章第二章 概概 述述 作为一种新的编程方法,面向方面编程可以分为两个组成部分:aop 语言规 范和 aop 的具体实现。语言规范定义了语言的基本元素和语法语义。语言实现则 定义了按照这种语言规范来验证代码的合法性并通过编译转化为可执行代码。 aop 语言规范通过建立一种语言来指定关注点织入的规则。目前常用的面向 方面编程语言有许多种,其中 aspectj 语言1是目前最流行的面向方面编程语言。 它是对 java 语言的在面向方面编程扩展。aspectj 语言向 java 语言中引入了连接 点 (join point) 1、 切入点 (pointcut)1、 通知 (advice)1、 类型间声明 (inter-type declaration)1和方面(aspect)1等概念,这些扩展实现了 aop 的核心思想,从 而让使用 aspectj 编程的程序能无缝集成核心关注点和横切关注点。 aop 实现用于将关注点(包括核心关注点和横切关注点)转化为可执行的代 码,从而将横切关注点代码和主应用程序集成在一起。这种工作机制也叫做编织 或织入(weaving)22。aop 编织的类型是多种多样的,有编译期织入、链接期 织入、载入期织入和运行期织入等。采用编织这一方式,将面向方面程序中改变 主程序的横切关注点代码与原面向对象程序进行有机地混合,从而实现了面向方 面程序为原面向对象程序提供的各种横切功能。 2.1 aop 的实现策略aop 的实现策略 现有 aop 应用到的横切技术,通常分为两种类型:动态横切和静态横切。 1) 动态横切11 动态横切是通过切入点和连接点在一个方面中创建行为的过程,连接点可以 在执行时横向地应用于现有对象。动态横切通常用于帮助向对象层次中的各种方 上海交通大学硕士学位论文 第二章 概述 9 法添加日志记录或身份认证。在很多应用场景中,动态横切技术基本上代表了面 向方面编程本身。 动态横切技术的核心主要包括 join point(连接点) 7,point cut(切入点) 7, advice(通知) 7和 aspect(方面) 7。下面概要地介绍这些术语分别代表的含义: 连接点(joint point)是指程序代码中明确定义的点,程序可以在这些位置上 横切应用程序。 切入点(pointcut)由连接点指示符表达式构成,它是建立在连接点上的一种 谓词逻辑。切入点具有两大功能:规定了横切关注需要匹配的连接点,用来判断 给定连接点是否匹配;捕获横切关注所需的连接点上下文环境。 通知(advice)是横切关注的主要实现形式,它被用来定义连接点匹配时,横 切关注在切入点上所要执行的动作。 方面(aspect)是实现横切关注的独立编程单元。它被用来封装上述由 aop 引入的编程结构和成员。 到目前为止,主流的 aop 技术采用的都是动态横切的技术。 2) 静态横切11 静态横切和动态横切的区别在于它不修改一个给定对象的执行行为。相反, 它允许通过引入附加的方法字段和属性来修改对象的结构。此外,静态横切可以 把扩展和实现附加到对象的基本结构中。静态横切亦称为 introduce 或 mixing11。 静态横切在 aop 技术中,受到的关注相对较少。事实上,这一技术蕴含的潜 力是巨大的。使用静态横切,架构师和设计者能用一种真正面向对象的方法有效 地建立复杂系统的模型。静态横切允许您不用创建很深的层次结构,以一种本质 上更优雅、更逼真于现实结构的方式,插入跨越整个系统的公共行为。尤其是当 开发应用系统时,如果需要在不修改原有代码的前提下,引入第三方产品和 api 库,则静态横切技术将发挥巨大的作用。 上海交通大学硕士学位论文 第二章 概述 10 2.2 aop 的组织策略aop 的组织策略 动态横切技术的具体实现方法一共有四种,下面将从简单到复杂的依次介绍 一下。 1) jdk 动态代理5, 6 动态代理是 j2se1.3 以上版本的内置特性。它允许你凭空(on-the- fly)创建一 个或更多接口的实现。动态代理内嵌在 jdk 中,排除了在各种环境下奇怪行为带 来的风险。jdk 动态代理有个限制就是它只能代理接口不能代理类。当然如果你 已经用接口很好的设计了你的应用,那这就不是一个问题。 2) 动态字节码生成5, 6 spring 采用字节码动态生成技术。cglib (code generation library)是做这个 的一个流行工具。它通过动态生成子类的方式来拦截方法。这些生成的子类改写 其父类的方法,这是用钩子 (hook) 5, 6调用拦截器实现。cglib 已经在 hibernate 这一开源框架中广泛使用,因此,可以认为动态字节码生成技术已被证明是可靠 的 j2ee 解决方案。 但是它最大的限制是,动态生成的子类不能改写和代理父类中的 final 方法, 但是因为 final 方法在传统编程中很少使用,因此该限制并没有多大的影响。 3) 自定义类加载器5, 6 使用自定义的类加载器,可以让你通知修改所创建的实例。这十分强大,因 为它提供了修改新操作行为的机会。jboss aop 用的这种方式实现 aop,它会根 据在 xml 文件中定义的方式加载和组织类。 这种方式最主要的问题在于, j2ee 服务器必须仔细地控制类加载次序。 这样, 程序就完全依赖 j2ee 服务器,一个 aop 应用可能在一个服务器上可以很好工作 但在另一个服务器上就会不能正常工作。 上海交通大学硕士学位论文 第二章 概述 11 4) 语言扩展5, 6 aspectj 是在语言层面的 aop 实现的排头兵。它包含了语言的扩展并且使用 自带的编译器,而不是简单地使用各种策略进行切面的组织。 虽然 aspectj 是非常强大和成熟的 aop 实现,它的语法还是过于复杂而且也 不是很直观。然而,aop 本身就不是很直观,尝试用一种新的语言去实现更显困 难。这种方式的另外一个问题是学习一门新语言的学习曲线。但是,到目前为止, 正是因为语言层面的支持,使得 aspectj 拥有最完整的 aop 功能。 2.3 现存 aop 编程工具现存 aop 编程工具 1) aspectj1,2 aspect 中的对方面的声明类似于java 语言中的对类声明。 由于aspectj 是java 语言在语法和语义的扩展,因此它额外地提供了一套处理方面的关键字。除了包 含属性和方法之外, aspectj 的方面声明还包含切入点和通知的绑定。 构建 aspectj 程序与构建 java 程序类似,其中包括调用 aspectj 的递增编译器,构建所有的项 目源文件, 包括普通 java 源文件。 运行 aspectj 程序也与运行普通 java 程序一样, 都是在 java 虚拟机上运行的。 2) spring aop4 spring aop 是 spring 框架重要组成部分,它实现了 aop 联盟规定的统一接 口。 spring aop 是由纯 java 开发完成的。 spring aop 只实现了方法级别的连接点, 因为对于 j2ee 应用程序,aop 拦截到方法级别的功能已经足够,这也是 spring aop 与 aspect j 和 jboss 的最大不同。因为其他两者对属性拦截也提供了支持。 spring aop 的编程方式能够模块化了横向关注点的实现,提供了一个更好更快的 软件开发方式。在软件结构日益扩大,结构日益复杂的今天,spring aop 将会发 挥越来越重要的作用。 上海交通大学硕士学位论文 第二章 概述 12 3) jboss aop3 aop 适合于开发 j2ee 容器服务器, 目前 jboss4.0 正是使用 aop 框架进行开 发的,是对于以前版本的 jboss 的完全重构。通过使用 aop 框架,jboss4.0 具体 的应用功能如下: authentication 权限 caching 缓存 context passing 内容传递 error handling 错误处理 lazy loading 后加载 logging,,tracing, profiling and monitoring 记录、跟踪、优化、校准 performance optimization 性能优化 persistence 持久化 resource pooling 资源池 synchronization 同步 transaction 事务 jboss 的 aop 架构负责处理所有以上横切关注点。通过使用了“拦截 器”(intercepts)概念,它把一个对象放到一个被拦截的类中。通过定义一段 xml 代码。一个 pointcut 定义了已经拦截的(intercepted )和正在拦截的类的规范,它是 一个可选项,可以通过 xml 文件中的过滤机制来选择它,所以只有规范的字段 和方法会被拦截。比较以上两者,jboss4.0 aop 架构超出了简单的向一个类中注 入行为的操作。它提出了引言的概念,这个引言是一个特定的拦截它在引导时把 一个新的接口存储到类中。另外,引言提供了类的接口的实现。 上海交通大学硕士学位论文 第二章 概述 13 2.4 aspectj 语言概述aspectj 语言概述 aspectj 是由 xerox palo alto 研究中心的一个研究团队开发出的针对 java 的 aop 实现系统。aspectj 既是一个语言规范,又是一个 aop 语言实现。语言规范 部分定义了多种语言构造以及它们支持面向方面范型的方式;语言实现部分则提 供了编译、调试及从代码生成文档的工具。 在语言方面,aspectj 的语言构造是从 java 语言中扩展而来的,因此所有合 法的 java 程序也都是合法的 aspectj 程序。 aspectj 使用 java 作为单个关注点的实 现语言,并扩展 java 以指定织入规则。这些规则是用连接点(join point)、切入 点 (pointcut) 、 通知 (advice) 、 类型间声明 (inter-type declaration) 和方面 (aspect) 来说明的。一个连接点是程序在执行过程中良好预定义的点,例如一个函数调用、 对一个成员变量的访问、一个对象的初始化、一个抛出异常的处理等等。连接点 的集合可以表述成为切入点,表示这个集合可能会横切这个系统。通知 (advice) 机制是在程序的执行过程中,当它与切入点发生匹配的时候,告诉程序如何采取 行动。另外,aspectj 还引入了类型间申明 (inter-type declaration) 这一机制,它 能够往现存的类里添加新的成员变量或者函数。最后,方面则是这些基础元素的 组合。所有以上提到的机制都让 aop 能清晰的描述横切关注点。 在具体实现上,aspectj 的织入器aspectj 的编译器负责把不同的方 面组合在一起。aspectj 的编译器生成的是符合 java 字节码规范的.class 文件,这 使得所有符合规范的 java 虚拟机都可以解释、执行其所生成的代码。 通过选择 java 为基础语言,aspectj 继承了 java 的所有优点并使得 java 程序 员能够比较容易地上手。aspectj 还提供了许多其他实用的工具。它有一个方面织 入器2,一个调试器2,文档生成工具2以及一个独立的可用来以可视化的方式观 察通知是如何切入系统各部分的方面浏览器2。 另外, aspectj 提还供了与流行 ide 的集成,如 eclipse,sun 公司的 forte,borland 公司的 jbuilder 以及 emacs 等, 这使得 aspectj 成为一个很有用的 aop 实现,特别是对 java 开发者而言。 上海交通大学硕士学位论文 第二章 概述 14 虽然 aspectj 是一个强大的面向方面编程的语言并已经有着广泛的应用, 关于 它的切入点机制仍然存在不少问题。首先,切入点的描述和通知部分的实现被放 在了一起,带来了切入点和通知的高耦合的问题;其次,切入点散布在 ao 部分 的代码中从而使得今后的维护相当的困难;最后,切入点的核心是在程序执行的 时候检查是否匹配,这让切入点描述更像规则定义而非编写代码,而事实上 aspectj 对于切入点的描述是编写代码。 为了解决以上的问题,在本文中,我们提出了一种新的切入点描述机制 基于 xml 的方面切入点描述语言 (xml aspect pointcut description language, xapdl)。xapdl 完全独立于基本关注点和横切关注点,专注于描述这两者之间 的关系。在 xml 这一结构化语言的帮助下,xapdl 能非常有效地改善软件模块 的演进、重用和维护,并且通过软件工具而非传统的手工操作,程序员能非常容 易地维护 xapdl。 在面向方面编程中,用 xml 来描述切入点有几个明显的优势。首先,所有 的切入点都被放在了一个文件之中,这极大方便了今后的维护;其次,通过使用 xml,增强了扩展性。最后,完备细致的切入点描述虽然导致 xapdl 相对复杂, 但现存许多已经成熟应用在 java 平台的 xml 的工具,比如解析器和修改器,使 得对于复杂的 xml 的操作变得轻松自如。 上海交通大学硕士学位论文 第三章 aop 存在的问题 15 第三章第三章 aop 存在的问题存在的问题 随着面向方面编程(aop)正变得越来越流行,结果之一就是 aop 工具的多样 性。在众多的 aop 工具中,有三个特别成功,它们分别是 aspectj、jboss aop 和 spring aop。这些工具都使用连接点模型(join point model)作为 aop 实现的核 心机制。简单的说,连接点模型就是显式定义横切结构13。连接点模型提供了一 个机制, 能识别在程序执行过程中哪里发生了横切事件。 aop 还提供了一个机制, 可以识别连接点集合13,也叫切入点。通知机制会让程序在执行过程中,一旦该 通知匹配了某个切入点,可以正确的采取对应的行为。所有以上谈到的机制使得 aop 能够非常清晰的描述程序中的横切关注点。尽管核心思想是一致的,但是因 为每个 aop 工具的实现是不同的,所以 aop 工具之间还存在许多不同之处。具 体的见表 3-1。 表 3-1 不同 aop 工具的比较 aspect declaration advice bodies pointcuts aspectj code code jboss aop annotation or xml spring aop xml java code string value 正如表格 1 中列出的, 以上三个 aop 工具中最大的不同在于对于切入点声明 部分,仔细分析可以发现一共有三种主要类型的声明方法: 类似 java 的代码风格; 注释; xml; 上海交通大学硕士学位论文 第三章 aop 存在的问题 16 下面就具体说说每一种方法的特点和优缺点。对于大部分开发者而言,具有 java 编程能力是最重要的,相对而言在 java 之上的语言扩展则显得不那么重要, 何况学习一个新的语言扩展需要付出大量的时间成本。相反,如果使用已经为人 熟悉的注释或者 xml,则可以大大降低学习曲线。aspectj 是采用类 java 的代码 风格切入点声明,作为 java 语法和语义的无缝扩展,aspectj 用一些关键字来处 理切入点; 此外, aspectj 也使用修饰符和通配符1, 2, 15。 jboss aop 框架使用 xml 或者注释来声明切入点,如果用 xml 的话,方面、切入点和通知的声明都是用 xml 描述的,切入点和通知的绑定是在 xml 的注释之中,而通知的具体实现则 使用 java 代码,至于这个代码如何被调用的则是透明的,这是 jboss aop 框架的 责任。在程序运行的时候,jboss aop 框架将会拦截与切入点匹配的函数调用, 并执行相应的通知部分。spring aop 框架和 jboss aop 框架非常相似,但功能上 比 jboss aop 更强大更细致,并且所需要的代价也更少,因为 spring aop 框架不 需要像 jboss aop 框架那样依赖一个独立的后台进程来完成所有的横切任务。但 是,spring aop 的框架相对 jboss aop 而言,复杂程度大大增加,难以掌握和控 制。 3.1 语法上的不同语法上的不同 从对以上三个 aop 工具的比较, 不难看出最主要的不同在于对切入点声明和 具体描述的方式。aspectj1, 2是对 java 的扩展,其对于切入点的声明和描述是放 在代码层面的,即在源代码之中,类似编程一般地描述切入点;jboss aop3既支 持 java 注释风格也支持 xml 风格的声明,但是具体的描述还是在代码之中;而 spring aop4则只允许配置文件中 xml 风格的声明。 具体应用的时候, 用 aspectj 编写横切关注点更像是在写程序,而 jboss 和 spring aop,则更像是编写独立的 xml 文件。 上海交通大学硕士学位论文 第三章 aop 存在的问题 17 3.2 语义上的相同语义上的相同 虽然以上三个 aop 工具的语法上是不同的, 但其核心的 aop 语义是相似的。 正如我们在前面所介绍的, 所有的 aop 工具都使用连接点模型作为具体实现的核 心机制:切入点的匹配和其与通知的绑定。表 3-2 列出了这三个工具语义上的细 节内容。 表 3-2 不同 aop 工具语法语义上的比较 pointcut matching advice forms dynamic context instantiate per extensibility aspectj signature type pattern subtypes wildcard annotation before around after after returning after throwing this target args vm target instance cflow below abstract pointcuts jbossaop signature instanceof wildcard annotation around vm class instance join point springao p regular expression before around throws after returning via reflectiv e access class instance overriding advice bindings 比较后我们可以得出如下结论:一方面,类似代码风格的切入点声明和描述 机制是三个工具中最简单的技术,因为不需要命名通
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 漯河医学高等专科学校《风景园林工程项目管理》2024-2025学年第一学期期末试卷
- 锦州医科大学医疗学院《三维建模与渲染》2024-2025学年第一学期期末试卷
- 山东城市服务职业学院《社会体育指导员》2024-2025学年第一学期期末试卷
- 江西工程职业学院《世界市场行情》2024-2025学年第一学期期末试卷
- 牡丹江医学院《体育科研与学位论文写作指导》2024-2025学年第一学期期末试卷
- 成都医学院《食品加工与保藏原理实验》2024-2025学年第一学期期末试卷
- 项目计划合同部安全生产责任书
- 借款合同延期补充协议
- 2026届上海外国语大学附属中学高二化学第一学期期末预测试题含答案
- 2026届辽宁省大连市达标名校高三上化学期中经典模拟试题含解析
- 苯职业病防护课件
- 2025年铸牢中华民族共同体意识基本知识测试题及答案
- 2025年湖北省中考道德与法治真题(解析版)
- 2025-2030年中国胃食管反流病行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030中国苯丙酮尿症(PKU)行业市场发展趋势与前景展望战略研究报告
- 2025至2030年中国PA10T行业市场竞争态势及未来前景分析报告
- 催收新人培训管理制度
- DZ/T 0089-1993地质钻探用钻塔技术条件
- 2025-2030中国铁路道岔行业市场现状供需分析及投资评估规划分析研究报告
- 特种设备安全法培训课件
- 2025-2030年中国快速消费品行业市场深度调研及竞争格局与投资研究报告
评论
0/150
提交评论