面向方面编程技术的研究与实践.pdf
《面向方面编程技术的研究与实践.pdf》由会员分享,可在线阅读,更多相关《面向方面编程技术的研究与实践.pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、http:/-1-面向方面编程技术的研究与实践面向方面编程技术的研究与实践 高尚 北京邮电大学计算机科学技术学院,北京(100876)E-mail: 摘摘 要要:传统的面向对象编程方法在处理一些关注点分散问题时存在着一定的局限性,面向方面编程增加了软件开发人员解决问题的维度,使编程人员能够以更接近自然语言的角度上进行分析、设计和编码。本文探讨了面向方面编程技术的思想,基本概念和原理,并通过一个实例介绍了面向方面编程的应用。关键词关键词:面向方面编程(AOP),模块化,方面,关注点 中图分类号:中图分类号:TP 312 1.引言引言 软件开发的方法是不断变化和发展的。随着计算机体系结构的发展和互
2、联网的广泛应用,使得计算和通信的成本以指数级下降。与此同时,商业计算的复杂性却逐步上升。这些迫使软件开发者必须使用更好的方法来建立和维护系统。软件开发的目标是要对世界的部分元素或信息流建立模型。实现软件系统的工程需要将系统分解成可以创建和管理的模块。上世纪 90 年代关于系统模块化特性的面向对象观点呈现上升趋势1。面向对象方法的焦点在于选择对象作为模块的主要单元,并将对象与系统的所有行为联系起来。对象成为问题领域和计算过程的主要元素。然而面向对象方法正面临它的局限性。在创建软件系统时,人们所关心的东西(称为关注点)范围很广(如日志记录和事务管理),并常常分散在程序的主逻辑之中。传统的编程技术着
3、眼于产生直接的指令序列,要求系统开发人员全面掌握编程过程中的所在关注点。程序员必须清楚地将实现关注点的命令与实现主要应用功能的代码混合在一起。这会导致产生包含混乱代码和难以维护的系统1。面向方面编程(Aspect Oriented Programming)是近年来出现的一种软件开发的新技术。它允许包含更丰富的程序规范和关于这些规范的更好模块化特征。它以一种全新的方法解决前面讲到的关注点分散问题1。2.AOP 的基本概念的基本概念 在面向对象编程中,类,对象,封装,继承,多态等概念是描述面向对象思想主要术语。与此类似,在面向方面编程中,同样存在着一些基本概念12 3:联结点(联结点(JointP
4、oint):):一个联结程序执行过程中的一个特定点。典型的联结点有:调用一个方法;方法执行这个过程本身;类初始化;对象初始化等。联结点是 AOP 的核心概念之一,它用来定义在程序的哪里通过 AOP 加入新的逻辑。切入点(切入点(Pointcut):):一个切入点是用来定义某一个通知该何时执行的一组联结点。通过定义切入点,我们可以精确地控制程序中什么组件接到什么通知。上面我们提到,一个典型的联结点是方法调用,而一个典型的切入点就是对某一个类的所在方法调用的集合。通常我们会通过组建复杂的切入点来控制通知什么时候被执行。通知(通知(Advice):):在某一个特定的联结点处运行的代码称为“通知”。通
5、知有很多种,比如在联结点之前执行的前置通知(before advice)和在联结点之后执行的后置通知(after http:/-2-advice)。方面(方面(Aspect):):通知和切入点的组合叫做方面,所以,方面定义了一段程序中应该包括的逻辑,以及何时应该执行该逻辑。织入(织入(Weaving):):织入是将方面真正加入程序代码的过程。对于静态 AOP 方案而言,织入是在编译时完成的,通常是在编译过程中增加一个步骤。类似的,动态 AOP 方案则是在程序运行是动态织入的。目标(目标(Target):):如果一个对象的执行过程受到某一个 AOP 的修改,那么它就叫一个目标对象。目标对象通常也
6、称为被通知对象。引入(引入(Introduction):):通过引入,可以在一个对象中加入新的方法或属性,以改变它的结构,这样即使该对象的类没有实现某一个接口,也可以修改它,使之成为该接口的一个实现。静态和动态:静态和动态:静态 AOP 和动态 AOP 两者之间的区别主要在于什么时间织入,以及如何织入。最早的 AOP 实现大多都是静态的。在静态 AOP 中,织入是编译过程的一个步骤。用Java 的术语说,静态 AOP 通过直接对字节码进行操作,包括修改代码和扩展类,来完成织入过程。显然,这种办法生成的程序性能很好,因为最后的结果就是普通的 Java 字节码,在运行时不再需要特别的技巧来确定什么
7、时候应该执行通知。这种方法的缺点是,如果想对方面做什么修改,即使只是加入一个新的联结点,都必须重新编译整个程序。AspectJ 是静态 AOP 的一个典型例子。与静态 AOP 不同,动态 AOP 中织入是在运行时动态完成的。织入具体是如何完成的,各个实现有所不同。Spring AOP 采取的方法是建立代理,然后代理在适当的时候执行通知。动态 AOP 的一个弱点就在于,其性能一般不如静态 AOP。而动态AOP 的主要优点在于可以随时修改程序的所有方面,而不需重新编译目标。3.AOP 实践实践 在 WEB 程序开发中,我们知道由于 HTTP 协议的无状态性,我们通常需要把用户的状态信息保存在 Se
8、ssion 中。在一些应用场景中,需要用户必须登录,才能继续操作。3.1 传统实现方法传统实现方法 为此我们在进行每个业务操作之前,传统的实现方法会加入以下的逻辑:protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException HttpSession session=request.getSession();if(session.getAttribute(user)=null)request.getRequestDispatcher
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 方面 编程 技术 研究 实践
限制150内