快速业务通道

AOP@Work: 用AspectJ和Spring进行依赖项插入 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
象的依赖项

发现满足这些依赖项的对象

用对象的依赖项对它进行配置

从下面的各种依赖项插入解决方案可以看出,解决这些职责有多种策略。

使用 Spring 进行依赖项插入

在标准的 Spring 部署中,Spring 容器同时负责创建和配置核心应用程序对 象(称为 bean)。因为容器既创建对象,又扮演代理的角色,所以对 Spring 容 器来说,确定 bean 已经创建而且需要配置是件轻而易举的小事。通过查询应用 程序的元模型,可以确定 bean 的依赖项,元模型通常是在 Spring 的配置文件 中用 XML 表示的。

满足 bean 的依赖项的对象是容器管理的其他 bean。容器充当这些 bean 的 仓库,所以可以用名称查询它们(或者在需要的时候创建)。最后,容器用新 bean 的依赖项对其进行配置。这通常是通过 setter 插入完成的(调用新 bean 的 setter 方法,把依赖项作为参数传递进去),虽然 Spring 支持其他形式的 插入,例如构造函数插入和查询方法插入(请参阅 参考资料 学习关于使用 Spring 进行依赖项插入的更多内容。)

方面的依赖项插入

像其他对象一样,方面可以从通过依赖项插入进行的配置中受益。在许多情 况 下,把方面实现为轻量级控制器 是良好的实践。在这种情况下,方面确定什么 时 候应当执行某些行为,但是会委托给协作器去执行实际的工作。例如,可以用异 常处理策略对象配置异常处理方面。方面会探测出什么时候抛出了异常,并委托 处理器对异常进行处理。清单 1 显示了基本的 RemoteException 处理方面:

清单 1. RemoteException 处理方面

public aspect RemoteExceptionHandling {    private RemoteExceptionHandler exceptionHandler;    public void setExceptionHandler(RemoteExceptionHandler aHandler) {      this.exceptionHandler = aHandler;    }    pointcut remoteCall() : call(* *(..) throws RemoteException+);     /**     * Route exception to handler. RemoteException will still     * propagate to caller unless handler throws an alternate     * exception.     */    after() throwing(RemoteException ex) : remoteCall() {     if (exceptionHandler != null)        exceptionHandler.onRemoteException(ex);    }    }

AOP@Work: 用AspectJ和Spring进行依赖项插入(3)

时间:2011-09-07 IBM Adrian Colyer

现在我要用依赖项插入,用一个特殊的异常处理策略来配置我的方面。对于 这 个方面,我可以用标准的 Spring 方式,但是有一个警告。一般来说,Spring 既 负责创建 bean,也负责配置 bean。但是,AspectJ 方面是由 AspectJ 运行时 创 建的。我需要 Spring 来配置 AspectJ 创建的方面。对于单体方面最常见的形 式 ,例如上面的 RemoteExceptionHandling 方面,AspectJ 定义了一个 aspectOf () 方法,它返回方面的实例。我可以告诉 Spring 使用 aspectOf() 方法作为 工 厂方法,获得方面的实例。清单 2 显示了方面的 Spring 配置:

清单 2. 方面的 Spring 配置

 <beans>       <bean name="RemoteExceptionHandlingAspect"      class="org.aspectprogrammer.dw.RemoteExceptionHandling"      factory-method="aspectOf">     <property name="exceptionHandler">      <ref bean="RemoteExceptionHandler"/>     </property>      </bean>    <bean name="RemoteExceptionHandler"      class="org.aspectprogrammer.dw.DefaultRemoteExceptionHandler">  

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