快速业务通道

Spring 1.2和2.0的简单AOP例子 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
译器),类加载时和运行时完成。 Spring和其他纯Java AOP框架一样,在运行时完成织入。 通知的类型:

l    前置通知(Before advice): 在某连接点(join point)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常)。

l    返回后通知(After returning advice): 在某连接点(join point)正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。

l    抛出异常后通知(After throwing advice): 在方法抛出异常退出时执行的通知。

l    后通知(After (finally) advice): 当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。

l    环绕通知(Around Advice): 包围一个连接点(join point)的通知,如方法调用。这是最强大的一种通知类型。 环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。 环绕通知是最常用的一种通知类型。

大部分基于拦截的AOP框架,例如Jboss,以及EJB 3里面的******(后续章节我们会加以介绍),都只提供环绕通知。 跟AspectJ一样,Spring提供所有类型的通知,我们推荐你使用尽量简单的通知类型来实现需要的功能。

例如,如果你只是需要用一个方法的返回值来更新缓存,虽然使用环绕通知也能完成同样的事情, 但是你最好使用After returning通知而不是环绕通知。 用最合适的通知类型可以使得编程模型变得简单,并且能够避免很多潜在的错误。 比如,你不需要调用JoinPoint(用于Around Advice)的proceed() 方法,就不会有调用的问题。 在Spring 2.0中,所有的通知参数都是静态类型,因此你可以使用合适的类型(例如一个方法执行后的返回值类型)作为通知的参数而不是使用一个对象数组。

切入点(pointcut)和连接点(join point)匹配的概念是AOP的关键,这使得AOP不同于其它仅仅提供拦截功能的旧技术。 切入点使得定位通知(advice)可独立于OO层次。 例如,一个提供声明式事务管理的around通知可以被应用到一组横跨多个对象中的方法上(例如服务层的所有业务操作)。

Spring 1.2和2.0的简单AOP例子(5)

时间:2011-09-14

10.4 开发 Spring 2.0 AOP 应用

Spring 2.0实现了两种方式的AOP配置,一种是基于XML配置文件式的,可以用在JDK1.4上,另一种是基于@AspectJ风格的标注(Annotation)进行AOP开发,可以用在JDK1.5的系统上。本节就对上节的应用进行改写,使用Spring 2.0 AOP的方式来开发。关于Spring AOP的资料和相关概念的详细信息,可以阅读Spring的中文文档。

10.4.1 使用aop 标签实现AOP

这种方式相对繁琐,所不同的是不需要再定义ProxyFactoryBean的实例,而且自动给相关的bean定义加入AOP功能,不在需要显式的去访问代理过的另外给出名字的bean定义了。

好了,现在让我们新建一个项目,名为Spring2_0AOP,并按照10.3节内容设置好必要的类库和必要的文件。那么再这个例子中,Man类的代码不需要做任何修改。需要改的是FBI这个类,而且它也不需要再实现某些接口了,类的源码如下所示:

import org.aspectj.lang.JoinPoint; /** *联邦调查局的探员将您的所有行动都记录在案。 *@authorBeanSoft */ publicclass FBI { publicvoid before(JoinPoint point){ Man man = (Man)point.getTarget(); System.err.println("FBI 发现" + man.getName() + "正在进行 " + point.getSignature().getName() + " 活动。"); } }

清单10.10 FBI类源码

注意这个类里面的方法 before(JoinPoint),方法名可以是任意的,可以带一个JoinPoint类型的参数,也可以不带参数直接写成before(),但是这个连接点(JoinPoint)对象

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号