【Java开源代码栏目提醒】:网学会员,鉴于大家对Java开源代码十分关注,论文会员在此为大家搜集整理了“基于XML描述AOP切入点的研究和实现(论文) - 生活指南”一文,供大家参考学习!
上海交通大学硕士学位
论文 摘要 I 基于XML描述AOP切入点的研究和实现 摘 要 面向方面编程Aspect-Oriented Programming AOP是一种新的程序设计方法旨在解决传统面向对象程序设计对于系统横切关注点的描述所存在的
代码散布和纠缠的问题使程序具有更好的模块性可维护性和扩展性。
近年来随着面向方面编程为越来越多的人接受并愈发流行成熟的AOP语言也不断涌现。
目前绝大多数的AOP语言都使用连接点模型Join Point Model来描述aspect和class的关系但是对于切入点pointcut所有的语言都使用纯文本类型的字符串来描述而这会给今后的开发和维护带来一系列问题。
为了解决这些问题本文提出一种新的切入点描述机制——基于XML的方面切入点描述语言XML Aspect Pointcut Description LanguageXAPDL。
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 opti
mistic. KEY WORDS: AOP Pointcut Description Language XML Technology 上海交通大学硕士学位
论文 第一章 绪论 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 AOP7。
面向方面的程序设计方法认为软件系统是由许多关注组合而成核心关注点实现了系统的主要业务逻辑构成了
系统的主体横切关注实现了系统中相对独立的功能横切在系统的主体框架之上。
和其他分离关注点的技术一样面向方面程序设计的目标是使设计的
代码具有更好的模块性8和结构性使横切关注点模块化而不是分散在整个系统中从而在根本上解决面向对象系统建模时由横切关注所引起的
代码分散和
代码纠缠问题。
具体来说面向方面的程序设计是指在设计阶段就将横切关注从系统中提取出来。
在实现阶段将这些横切关注封装成单独的编程模块10方面aspect。
最后通过一定的静态或动态编织技术22将这些横切关注
代码自动注入回系统从而实现了对横切关注点的封装和集中管理。
因此在使用面向方面思想开发的系统中开发人员只需分别集中精力实现程序的核心业务逻辑和系统级别的横切关注点而不用考虑这两者之间是如何具体联系的——其是由AOP编织机weaver22来处理它会自动把横切关注点织入到系统之中使最后得到的
代码体现出核心关注和横切关注共同组合而成的行为。
因此面向方面编程不仅保留了面向对象程序
设计方法对核心关注点的封装和重用还能够非常有效地对横切关注点进行封装和集中管理。
但是随着对面向方面编程研究的不断深入我们也发现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 Interface12它是一个纯理论的研究具体如何实现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 point1、切入点pointcut1、通知advice1、类型间声明inter-type declaration1和方面aspect1等概念这些扩展实现了AOP的核心思想从而让使用AspectJ编程的程序能无缝集成核心关注点和横切关注点。
AOP实现用于将关注点包括核心关注点和横切关注点转化为可执行的
代码从而将横切关注点
代码和主应用程序集成在一起。
这种工作机制也叫做编织或织入weaving22。
AOP编织的类型是多种多样的有编译期织入、链接期织入、载入期织入和运行期织入等。
采用编织这一方式将面向方面程序中改变主程序的横切关注点
代码与原面向对象程序进行有机地混合从而实现了面向方面程序为原面向对象程序提供的各种横切功能。
2.1 AOP的实现策略 现有AOP应用到的横切技术通常分为两种类型动态横切和静态横切。
1 动态横切11 动态横切是通过切入点和连接点在一个方面中创建行为的过程连接点可以在执行时横向地应用于现有对象。
动态横切通
常用于帮助向对象层次中的各种方上海交通大学硕士学位
论文 第二章 概述 9 法添加日志记录或身份认证。
在很多应用场景中动态横切技术基本上代表了面向方面编程本身。
动态横切技术的核心主要包括join point连接点 7point cut切入点 7advice通知 7和aspect方面 7。
下面概要地介绍这些术语分别代表的含义 连接点joint point是指程序
代码中明确定义的点程序可以在这些位置上横切应用程序。
切入点pointcut由连接点指示符表达式构成它是建立在连接点上的一种谓词逻辑。
切入点具有两大功能规定了横切关注需要匹配的连接点用来判断给定连接点是否匹配捕获横切关注所需的连接点上下文环境。
通知advice是横切关注的主要实现形式它被用来定义连接点匹配时横切关注在切入点上所要执行的动作。
方面aspect是实现横切关注的独立编程单元。
它被用来封装上述由AOP引入的编程结构和成员。
到目前为止主流的AOP技术采用的都是动态横切的技术。
2 静态横切11 静态横切和动态横切的区别在于它不修改一个给定对象的执行行为。
相反它允许通过引入附加的方法字段和属性来修改对象的结构。
此外静态横切可以把扩展和实现附加到对象的基本结构中。
静态横切亦称为introduce或mixing11。
静态横切在AOP技术中受到的关注相对较少。
事实上这一技术蕴含的潜力是巨大的。
使用静态横切架构师和设计者能用一种真正面向对象的方法有效地建立复杂系统的模型。
静态横切允许您不用创建很深的层次结构以一种本质上更优雅、更逼真于现实结构的.