快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
,就调用名为before的方法,这个方法位于aspect里面的引用的那个bean中,这里是fbi(即ref=”fbi”)。其实Spring执行到这里后,会自动的把这些代码翻译成底层的Bean定义(后台依然会采用ProxyFactoryBean这样的机制),然后把对应的获取bean的操作直接委托给代理类,这就是为什么上文提到的测试类只需要访问原来的man这个bean,对应的拦截类就会被执行的原因。从这里看到Spring 2.0中要定义一个AOP的bean类,仍然是比较复杂的,XML文件和概念都增加了很多,需要读者慢慢来学习和理解。

本节的详细参考资料可以阅读Spring参考文档的6.3. Schema-based AOP support一节。

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

时间:2011-09-14

10.4.2使用标注(@AspectJ)实现AOP

下面的文档来自于Spring:"@AspectJ"使用了Java 5的注解,可以将切面声明为普通的Java类。 AspectJ 5发布的 AspectJ project (http://www.eclipse.org/aspectj)中引入了这种@AspectJ风格。 Spring 2.0 使用了和AspectJ 5一样的注解,使用了AspectJ 提供的一个库来做切点(pointcut)解析和匹配。

为了在Spring配置中使用@AspectJ aspects,你必须首先启用Spring对基于@AspectJ aspects的配置支持,自动代理(autoproxying)基于通知是否来自这些切面。 自动代理是指Spring会判断一个bean是否使用了一个或多个切面通知,并据此自动生成相应的代理以拦截其方法调用,并且确认通知是否如期进行。

通过在你的Spring的配置文件中引入下列元素来启用Spring对@AspectJ的支持:

<aop:aspectj-autoproxy/>

也可以通过在你的application context中添加如下定义来启用@AspectJ支持:

<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />

你需要在你的应用程序的classpath中引入两个AspectJ库:aspectjweaver.jar和 aspectjrt.jar。我们这里用的MyEclipse,在添加Spring开发功能时已经自动的加入了这些类库文件,无需手工配置了。

定义切面Aspect:在启用@AspectJ支持的情况下,在application context中定义的任意带有一个@Aspect切面(拥有@Aspect注解)的bean都将被Spring自动识别并用于配置在Spring AOP。

定义切入点Pointcut:现在通过在 @AspectJ 注解风格的 AOP 中,一个切入点签名通过一个普通的方法定义来提供,并且切入点表达式使用 @Pointcut 注解来表示(作为切入点签名的方法必须返回 void 类型)。

好了,引用了这么些文档,我们需要介绍这个基于标注的新的AOP项目了,这个项目的名字是Spring2_0AOPAspectJ,如前一节所示加入了Spring核心和AOP类库后,就可以开发了。那么相比较10.4.1 使用aop 标签实现AOP一节,这一个项目的代码仅仅有两个地方要改。首先我们要修改FBI类的源码,加入标注来实现切面和切入点定义,如下所示:

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

这个类中的@Before后面的"execution(* Man.*(..))"是切入点所对应的切入点表达式,其意义和上一节的是一致的,仍然表示的是执行 Man 类的所有方法时将触发此方法的执行。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号