快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
scAnn)    {     String beanName = getBeanName(newInstance, scAnn);      beanFactory.applyBeanPropertyValues(newInstance,beanName);     }    /**     * Determine the bean name to use - if one was provided in     * the annotation then use that, otherwise use the class name.     */    private String getBeanName(Object obj, SpringConfigured ann) {     String beanName = ann.value();     if (beanName.equals (“”)) {      beanName = obj.getClass().getName ();     }     return beanName;    }     }

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

时间:2011-09-07 IBM Adrian Colyer

SpringConfiguredObjectBroker 内部

我将依次分析 SpringConfiguredObjectBroker 方面的各个部分。首先,这个方面实现了 Spring 的 ApplicationContextAware 接口。代理方面本身是由 Spring 配置的 (这是它得到对应用程序上下文的引用的方式)。让方面实现 ApplicationContextAware 接口,确保了 Spring 知道在配置期间向它传递一个 到当前 ApplicationContext 的引用。

切点 springConfiguredObjectCreation() 用 @SpringConfigured 标注与任何对象的 初始化连接点匹配。标注和新创建的实例,都在连接点上作为上下文被捕捉到。 最后,返回的 after 建议要求 Spring 配置新创建的实例。bean 名称被用来查 询实例的配置信息。我可以以 @SpringConfigured 标注的值的形式提供名称, 或 者也可以默认使用类的名称。

方面的实现本身可以是标准库的一部分( 实 际上 Spring 的未来发行版会提供这样的方面),在这种情况下,我需要做的全 部工作只是对 Spring 要配置的实例的类型进行标注,如下所示:

  @SpringConfigured("AccountBean")   public class Account {    ...   }

可以在程序的控制下, 创 建这一类类型的实例(例如,作为数据库查询的结果),而且它们会把 Spring 为它们配置的全部依赖项自动管理起来。请参阅 下载 得到这里使用的 @SpringConfigured 标注的示例。请注意,当我选择为这个示例使用的标注时( 因为提供 bean 名称是非常自然的方式),标记器接口使得在 Java™ 1.4 及以下版本上可以使用这种方法。

就像我在这一节开始时讨论的, SpringConfigured 技术不仅仅适用于域实例,而且适用于在 Spring 容器的控 制 之外创建的任何对象(对于 Spring 本身创建的对象,不需要添加任何复杂性) 。通过这种方式,可以配置任何方面,而不用管它的生命周期。例如,如果定义 percflow 方面,那么每次进入相关的控制流程时,AspectJ 都会创建新的方面 实 例,而 Spring 会在每个方面创建的时候对其进行配置。

基于接口的插 入

迄今为止,我使用了 Spring 容器读取的 bean 定义来确定对象的依赖 项 。这个方案的一个变体采用合约接口,由客户端声明它的要求。假设前一节的 Account 实体要求访问 AccountOperationValidationService。我可以声明一个 接口,如清单 4 所示:

清单 4. 客户端接口

public interface AccountOperationValidationClient { public void setAccountOperationValidationService( AccountOperationValidationService aValidationService); }

现在,需要访问 AccountOperationValidationService 的对象必须实现这个 接口,并把自己声明为客户。使用与前一节开发的方面类似的方面,我可以匹配 实现这个接口的客户对象的所有初始化连接点。由它负责第一个代理职责:确定 什么时候需要配置对象。第二个职责在接口中被明确表达:必须满足的依赖项是 验证服务依赖项。我将用

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