快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
cationContext ctx = new ClassPathXmlApplicationContext(configPath); Thread thread = new Thread(); ① 象传统一样通过new构造领域对象 System.out.println(thread.toString()); ② 查看领域对象的信息 } }

在①处使用传统创建领域对象的方式构造一个Thread领域对象,在②处打印出该领域对象的信息。为ConfigureAnnoAspectTest类设置好JVM的javaagent参数,启用AspectJ LTW织入器,设置完成后,运行该测试类,控制台将输出以下的信息: …

① 以下两行表示织入器注册切面类

INFO [main] (AspectJWeaverMessageHandler.java:55) - [AspectJ] register aspect org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect INFO [main] (AspectJWeaverMessageHandler.java:55) - [AspectJ] register aspect org.springframework.transaction.aspectj.AnnotationTransactionAspect …

②以下几行表示织入器对匹配目标类进行织入操作INFO [main] (AspectJWeaverMessageHandler.java:55) - [AspectJ] weaving ''com/baobaotao/configure/Topic'' INFO [main] (AspectJWeaverMessageHandler.java:55) - [AspectJ] Join point ''initialization(void com.baobaotao.configure.Topic.<init>())'' in Type ''com.baobaotao.configure.Topic'' (Topic.java:8) advised by afterReturning advice from ''org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect'' (AbstractBeanConfigurerAspect.aj:43) INFO [main] (AspectJWeaverMessageHandler.java:55) - [AspectJ] weaving ''com/baobaotao/configure/Thread'' INFO [main] (AspectJWeaverMessageHandler.java:55) - [AspectJ] Join point ''initialization(void com.baobaotao.configure.Thread.<init>())'' in Type ''com.baobaotao.configure.Thread'' (Thread.java:7) advised by afterReturning advice from ''org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect'' (AbstractBeanConfigurerAspect.aj:43)''

③以下表示织入器略过不在目标范围内的类

INFO [main] (AspectJWeaverMessageHandler.java:55) - [AspectJ] not weaving ''org/springframework/context/support/ClassPathXmlApplicationContext''

④领域对象的信息

title:测试的主题;

topic:title:测试帖子;content:测试内容

查看以上的信息,我们发现④处输出的领域信息是我们在Spring IoC容器中配置的信息,可见我们通过new Thread()创建的领域对象,其实已经从Spring IoC容器中获取到对应的Bean了。

这个过程参与的角色比较多,关系错踪复杂,我们有必须对这一过程重新进行梳理,找出角色间的关系和参与的操作,请看下图:

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

AspectJ LTW织入器(aspectjweaver.jar)根据aop.xml中配置信息,在类加载期将切面类(AnnotationBeanConfigurerAspect)织入到标注@Configurable的类(Thread和Topic)中。

Spring IoC容器中配置了AnnotationBeanConfigurerAspect,使其可以感知Spring IoC容器,此外,Spring还为标注了@Configurable的类配置了对应的Bean。这样,Thread和Topic通过new实例化对象时,其实是通过AnnotationBeanConfigurerAspect从容器中获取实例。

在这一过程中,我们有两个问题需要进一步说明:第一,AnnotationBeanConfigurerAspect是静态的类,也即一个ClassLoader对应一个实例;第二,AnnotationBeanConfigurerAspect通过类反射机制获取Thread和Topic的类全限定名:com.baobaotao.configure.Thread和com.baobaotao.configure.Topic,并用这个名称到Spring IoC容器中获取对应的Bean,因为如果配置时未指定Bean的名字

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