实现基于Aspectwerkz的AOP开发

2016-01-29 12:55 17 1 收藏

实现基于Aspectwerkz的AOP开发,实现基于Aspectwerkz的AOP开发

【 tulaoshi.com - Java 】

  一、AOP编程概览

  面向对象编程技术进入软件开发的主流对软件的开发方式产生了极大的影响,开发者可以用一组实体以及这些实体之间的关系将系统形象地表示出来,这使得他们能够设计出规模更大、更复杂的系统,开发周期也比以前更短。OO开发的唯一问题是,它本质上是静态的,需求的细微变化就可能对开发进度造成重大影响。

  Aspect-Oriented Programming(AOP)是对OO技术的补充和完善,它允许开发者动态地修改静态的OO模型,构造出一个能够不断增长以满足新增需求的系统,就象现实世界中的对象会在其生命周期中不断改变自身,应用程序也可以在发展中拥有新的功能。

  例如,许多人想必有过在开发简单的Web应用时将Servlet作为入口点的经验,即用Servlet接收HTML表单的输入,经过处理后返回给用户。开始时的Servlet可能是非常简单的,只有刚好满足用户需求的最少量的代码。然而,随着“第二需求”的实现,例如实现异常处理、安全、日志等功能,代码的体积就会增加到原来的三、四倍——之所以称之为“第二需求”,是因为Servlet的基本功能是接受和处理用户的请求,对于这个目标来说,日志、安全之类的机制并不是必不可少的。

  AOP允许动态地改变OO的静态模型,不必修改原来的静态模型也可以加入满足第二需求所需的代码(实际上,甚至连原来的源代码也不需要)。更令人称奇的是,后来加入的代码往往可以集中在一个地方,而不必象单纯使用OO时那样将后来加入的代码分散到整个模型。

  二、基本术语

  在介绍AOP开发实例之前,我们先来了解几个标准的AOP术语,以便更好地掌握相关的概念。

  █ Cross-cutting concern

  在OO模型中,虽然大部份的类只有单一的、特定的功能,但它们通常会与其他类有着共同的第二需求。例如,当线程进入或离开某个方法时,我们可能既要在数据访问层的类中记录日志,又要在UI层的类中记录日志。虽然每个类的基本功能极然不同,但用来满足第二需求的代码却基本相同。

  █ Advice

  它是指想要应用到现有模型的附加代码。在本例中,它是指线程进入或退出某个方法时要运行的日志代码。

  █ Point-cut

  这个术语是指应用程序中的一个执行点,在这个执行点上需要采用前面的cross-cutting concern。在本例中,当线程进入一个方法时出现一个Point-cut,当线程离开方法时又出现另一个Point-cut。

  █ Aspect

  Point-cut和advice结合在一起就叫做aspect。在下面的例子中,我们通过定义一个point-cut并给予适当的advice加入了一个日志(logging)aspect。

  AOP还有其它许多特性和术语,例如引入(Introduction),即把接口/方法/域引入到现有的类——它极大地拓宽了开发者的想象力。不过本文只介绍一些最基本的持性,熟悉这里介绍的概念后,你再深入一步研究AOP的其它特性,看看如何在自己的开发环境中使用它们。

  三、现有的框架

  目前最成熟、功能最丰富的AOP框架当数AspectJ,AspectJ已成为大多数其它框架跟从的标准。但是,AspectJ也走出了非同寻常的一步,它的实现为Java语言增添了新的关键词。虽然新的语法并不难学,但却意味着我们必须换一个编译器,还要重新配制编辑器,只有这样才能适应新的语法。在规模较大的开发组中,这些要求可能难以办到,因为整个开发小组都会受到影响。由于语言本身的变化,开发小组把AOP技术引入到现有项目的学习周期随之延长。

  现在我们需要的是这样一个框架,它可以方便地引入,且不会对原来的开发和构造过程产生任何影响。满足这些要求的框架不止一个,例如JBoss AOP、Nanning、Aspectwerkz(AW)。本文选用的是Aspectwerkz,因为它可能是最容易学习的框架,也是最容易集成到现有项目的框架。

  Aspectwerkz由Jonas Boner和Alexandre Vasseur创建,它是目前最快速、功能最丰富的框架之一。虽然它还缺乏AspectJ的某些功能,但己足以满足大多数开发者在许多情形下的需要。

  Aspectwerkz最令人感兴趣的特性之一是它能够以两种不同的模式运行:联机模式和脱机模式。在联机模式下,AW直接干预属于JVM的底层类装入机制,截取所有的类装入请求,对字节码实施即时转换。AW提供了干预类装入过程的许多选项,另外还有一个替代bin/java命令的封装脚本,这个脚本能够根据Java版本和JVM能力自动生成一组可运行的配制。对于开发者,联机模式有许多优点,它能插入到任何类装入器并在类装入期间生成新的类。也就是说,我们不必手工修改应用程序的类,只要按通常的方式部署即可。不过,联机模式要求对应用服务器进行额外的配制,有时这一要求可能很难满足。

  在脱机模式下,生成类需要二个步骤。第一步是用标准的编译器编译,第二步是重点——以脱机模式运行AWcompiler编译器,让它处理新生成

来源:http://www.tulaoshi.com/n/20160129/1488145.html

延伸阅读
标签: Web开发
XML(Extensible Markup Language)是一种基于文本格式的标记语言,它注重对数据结构和数据意义的描述,实现了数据内容和显示样式的分离,而且是与平台无关的。由于XML注重数据内容的描述,因而,对于数据的检索非常有意义,我们不会再象HTML那样,检索出与我们要求无关的信息。另一方面,XML文件是数据的载体,利用XML作为数据库,不需要...
标签: Web开发
script     //设一个变量     var XMLHttpReq=false;    //创建一个XMLHttpRequest对象    function createXMLHttpRequest(){      if(window.XMLHttpRequest){ //Mozilla       XMLHttpReq=new XMLHttpReques...
目前整个开发社区对AOP(Aspect Oriented Programing)推崇备至,也涌现出大量支持AOP的优秀Framework,--Spring, JAC, Jboss AOP 等等。AOP似乎一时之间成了潮流。Java初学者不禁要发出感慨,OOP还没有学通呢,又来AOP。本文不是要在理论上具体阐述何为AOP, 为何要进行AOP . 要详细了解学习AOP可以到它老家http://aosd.net去瞧瞧。这里只是意图通...
摘要:介绍了ADF的特点和结构,描述了使用ADF开发J2EE应用程序的过程。 关键词:ADF ORACLE J2EE MVC ADF简介 ADF(Application Development Framework)是Oracle公司为简化J2EE程序开发的复杂性专门开发的一种解决方案,ADF通过减少实现设计模式和应用程序框架的代码量,简化了J2EE的研发难度。其优点主要体现在以下四个方面: ...
标签: Web开发
购物车是电子商务网站中不可缺少的组成部分,但目前大多数购物车只能作为一个顾客选中商品的展示,客户端无法将购物车里的内容提取出来满足自己事务处理的需要,而这一点在有些电子商务活动中很有必要。XML的出现使得网络上传输的数据变得有意义起来,我们可以根据不同的要求以不同的样式将一个购物车的内容显示出来。 本文将详细分...

经验教程

759

收藏

27
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部