快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
ext ctx = new ClassPathXmlApplicationContext(configPath); Waitress waitress = (Waitress)ctx.getBean("waitress"); waitress.serveTo("Johnson"); } }

控制台输出以下的信息: 

①说明AspectJ切面织入到Waitress..serveTo()中,且礼貌用语从Spring IoC中注入

From AspectJ:How are you!

Katty serves to Johnson...

从输出信息中,我们可以知道,Spring成功地管理了AspectJ的切面,AspectJ的切面类也成功地织入到目标类中。

让Spring管理容器外的对象

Spring为管理容器外创建的对象提供了一个AspectJ语法编写的切面类:

org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect,它位于spring-aspects.jar包中。spring-aspects.jar类包没有随Spring标准版一起发布,但你可以在完整版中找到它,位于Spring项目的dist目录下。该切面类匹配所有标注@Configurable的类,该注解类org.springframework.beans.factory.annotation.Configurable则位于spring.jar中。

AspectJ在类加载时,将AnnotationBeanConfigurerAspect切面将织入到标注有@Configurable注解的类中。

AnnotationBeanConfigurerAspect将这些类和Spring IoC容器进行了关联,AnnotationBeanConfigurerAspect本身实现了BeanFactoryAware的接口。

这样,标注了@Configurable的类通过AspectJ LTW织入器织入AnnotationBeanConfigurerAspect切面后,就和Spring IoC容器间接关联起来了,实现了Spring管理容器外对象的功能。

展现该功能的一个比较好的实例是管理Spring IoC容器外的领域对象。回想一下我们通常如何进行Dao类的单元测试:比如测试一个论坛主题ThreadDao。首先,我们需要在单元测试类中手工创建论坛主题Thread领域对象、帖子Topic领域对象、附件Attachment领域对象并设置好属性值,然后手工设置这些领域对象的关联关系。

对于习惯了使用Spring IoC依赖注入功能的开发者而言,可能更希望让Spring IoC容器来做这样工作——当然,原来我们就可以做这样的工作,在Spring配置文件中配置好领域对象,然后通过ctx.getBean(beanName)获取领域对象。但很多开发者可能并不喜欢这种方式。他们既希望以传统的new Thread()方式创建领域对象,但又能够享受Spring IoC所提供的依赖注入的好处。Spring管理容器外对象的功能让我们拥有了这个能力。

在Spring 2.0中集成AspectJ(4)

时间:2011-01-02 陈雄华

下面,我们将通过一个实例展现这一神秘的功能。首先,来看一下我们希望管理的两个领域对象:

package com.baobaotao.configure; import java.io.Serializable; import org.springframework.beans.factory.annotation.Configurable; @Configurable ① public class Thread implements Serializable...{ private String title; private Topic topic; //get/setter public String toString()...{ return "title:"+title+";\ntopic:"+topic; } }

Thread是论坛主题的领域对象,一个论坛主题对应一个主帖,并拥有多个跟帖,为了简单,这里仅保留主贴对象topic,Topic领域对象类如下所示:package com.baobaotao.configure; import java.io.Serializable; import org.springframework.beans.factory.annotation.Configurable; @Configurable ① public class Topic implements Serializable...{ private String title; private String content; //get/setter public String toString()...{ return "title:"+title+";content:"+content; } }

Thread和Topic在①处,都标注了@Configurable注解。仅仅标注了注解并没有任何用途,我们需要利用AspectJ LTW在加载这些领域对象

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