快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
一个方面插入所有客户验证服务的依赖项。方面得到合 适服务的最简单方法就是把服务插入到方面自身!清单 5 显示了一个示例:

清单 5. 服务插入器方面

/** * ensure that all clients of the account validation service * have access to it */ public aspect AccountOperationValidationServiceInjector { private AccountOperationValidationService service; /** * the aspect itself is configured via Spring DI */ public void setService(AccountOperationValidationService aService) { this.service = aService; } /** * the creation of any object that is a client of the * validation service */ pointcut clientCreation(AccountOperationValidationClient aClient) : initialization(AccountOperationValidationClient+.new(..)) && this(aClient); /** * inject clients when they are created */ after(AccountOperationValidationClient aClient) returning : clientCreation(aClient) { aClient.setAccountOperationValidationService(this.service); } }

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

时间:2011-09-07 IBM Adrian Colyer

这个解决方案提供了两级控制。服务本身实际的定义是在 Spring 的配置文 件中提供的,就像清单 6 中的 XML 片段示例一样:

清单 6. 服务插入器配置

<beans> <bean name="AccountOperationValidationServiceInjector" class="org.aspectprogrammer.dw. AccountOperationValidationServiceInjector" factory-method="aspectOf"> <property name="service"> <ref bean="AccountOperationValidationService"/> </property> </bean> <bean name="AccountOperationValidationService" class="org.aspectprogrammer.dw. DefaultAccountOperationValidationService"> </bean> </beans>

服务的客户只需要实现 AccountOperationValidationClient 接口,那么就 会自动用 Spring 定义的服务的当前实例对它们进行配置。

重复插入

在 Spring 中的查询方法插入查询方法插入是 Spring 容器支持的一种高级 特性:由容器覆盖被管理 bean 的抽象或具体方法,返回在容器中查询另一个命 名 bean 的结果。查询通常是非单体 bean。查询依赖项的 bean ,用被查询 bean 类型所声明的返回类型,定义查询方法。Spring 配置文件在 bean 的内部 使用 <lookup-method> 元素告诉 Spring 在调用查询方法时应当返回什 么 bean 实例。请参阅 参考资料 学习关于这项技术的更多内容。带有 HotSwappable 目标源的 Spring AOP 代理提供了另一种方法。

.迄今为止,我介绍的解决方案都是在对象初始化之后立即配置对象。但是, 在某些情况下,客户需要与之协调的对象在运行的时候变化。例如,通过与系统 进行交互,销售团队可以动态地为在线预订应用程序修改报价策略和座位分配策 略。与报价策略和座位分配策略交互的预订服务需要的策略实现,应当是预订时 的实现,而不是预订服务第一次初始化的时候实现的版本。在这种情况下,可以 把依赖项的插入延迟到客户第一次需要它的时候,并在每次引用依赖项的时候, 将依赖项的最新版本重新插入客户。

这个场景的基本技术包括字段级插入或 getter 方法覆盖。在进入示例之前 ,我要再次强调:我要介绍的插入技术所面向的对象,是在 Spring 容器的控制 之外 创建的。对于 Spring 创建的对象,Spring 容器已经提供了解决这些需求 的简单机制。

字段级插入

在下面的示例中,可以看出如何为延迟插入或重复

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