快速业务通道

在Spring 2.0中集成AspectJ - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
法编写的。②处通过通配符指定需要进行织入操作的目标类。通过..*将需要处理的目标类限制在项目类包下是一个比较好的方法,否则织入器将对所有类进行操作,而这并不是我们期望的行为。 

AspectJ织入切面结合Spring IoC容器管理切面实例

让AspectJ为Java类提供切面织入服务,同时让目标类和切面类享受Spring IoC依赖注入功能,这样,两者是紧密地集成在一起了。

首先,我们来看一下需要AspectJ进行切面织入的目标类:

package com.baobaotao; public class Waitress ...{ private String name; public void serveTo(String client) ...{ System.out.println(name + " serves to " + client+"..."); } public String getName() ...{ return name; } public void setName(String name) ...{ this.name = name; } }

Waitress拥有一个name属性和一个serveTo()方法。现在我们需要通过AspectJ为Waitress进行切面织入,以便在侍者提供服务之前强制使用礼貌用语:

package com.baobaotao; public aspect TestAspectj ...{ private pointcut traceServeTo() :execution(* serveTo(..));①切点 before(): traceServeTo() ...{②前置增强 System.out.println(message); } private String message; ③礼貌用语 public void setMessage(String message)...{ this.message = message; } }

(注:为了能够编写AspectJ的切面,你首先需要从http://www.eclipse.org/aspectj/downloads.php下载AspectJ开发插件,以支持AspectJ语法。目前AspectJ分别为Eclipse、JBuilder、NetBeans、JDeveloper IDE.以及Emacs and JDEE提供了插件。) 

TestAspectj切面类将对Waitress的serveTo()方法进行前置增强,在①处定义了切点,在②处定义了前置增强方法。此外,该切面类还拥有一个message属性,用于提供规范的服务前礼貌用语,我们希望通过配置,在Spring IoC容器中注入该属性。

在Spring配置文件中,我们可以按配置一般Bean相似的方式配置AspectJ切面类(TestApectj)和织入AspectJ的目标类(Waitress):

<bean id="aspectj" class="com.baobaotao.ThreadAspectj" factory-method="aspectOf"> <property name="message" value="How are you!"/> </bean> <bean id="waitress" class="com.baobaotao.Waitress"> <property name="name" value="Katty"/> </bean>

在Spring 2.0中集成AspectJ(3)

时间:2011-01-02 陈雄华

注意,配置AspectJ切面类里,需要指定factory-method="aspectOf"属性,以便确保Spring从AspectJ获取切面实例,而非自己创建该实例。 

为了让ThreadAspectj起作用,当然我们需要调整aop.xml的配置:

<aspectj> <aspects> <aspect name="com.baobaotao.ThreadAspectj "/> </aspects> <weaver options="-showWeaveInfo -XmessageHandlerClass:org.springframework.aop.aspectj.AspectJWeaverMessageHandler"> <include within="com.baobaotao..*" /> </weaver> </aspectj>

运行以下的测试代码(同样的,你需要为该类设置JVM javaagent参数):package com.baobaotao; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class WaitressAspectjTest ...{ public static void main(String[] args) ...{ String configPath = "com/baobaotao /beans.xml"; ApplicationCont

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