快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
  </bean>  </beans>

我想确保我的方面在远程异常抛出之前得到配置。在示例代码中,我用 Spring 的 ApplicationContext 确保了这种情况,因为它会自动地预先实例化 所 有单体 bean。如果我使用普通的 BeanFactory,然后再调用 preInstantiateSingletons,也会实现同样的效果。

域对象的依赖项插入

配置单体方面就像在 Spring 容器中配置其他 bean 一样简单,但是对于拥 有 其他生命周期的方面来说,该怎么办呢?例如 perthis、pertarget 甚至 percflow 方面?生命周期与单体不同的方面实例,不能由 Spring 容器预先实 例 化;相反,它们是由 AspectJ 运行时根据方面声明创建的。迄今为止,代理 (Spring)已经知道了对象需要配置,因为它创建了对象。如果我想执行非单体 方面的依赖项插入,就需要用不同的策略来确定需要配置的对象已经创建。

非单体方面不是能够从外部配置受益的、在 Spring 容器的控制之外创建的 惟 一对象类型。例如,需要访问仓库、服务和工厂的域实体(请参阅 参考资料) 也 会从依赖项插入得到与容器管理的 bean 能得到的同样好处。回忆一下代理的四 项职责:

确定对象需要配置(通常因为对象刚刚创建)

确定对象的依赖项

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

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

我仍然想用 Spring 来确定对象的依赖项,去发现满足这些依赖项的对象, 并 用对象的依赖项来配置对象。但是,需要另一种方法来确定对象需要配置。具体 来说,我需要一个解决方案,针对那些在 Spring 的容器控制之外,在应用程序 执行过程中的任意一点上创建的对象。

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

时间:2011-09-07 IBM Adrian Colyer

SpringConfiguredObjectBroker

我把 Spring 配置的对象叫作 SpringConfigured 对象。创建新的 SpringConfigured 对象之后的需求就是,应当请求 Spring 来配置它。Spring ApplicationContext 支持的 SpringConfiguredObjectBroker 应当做这项工作 , 如清单 3 所示:

清单 3. @SpringConfigured 对象代理

public aspect SpringConfiguredObjectBroker   implements ApplicationContextAware {    private ConfigurableListableBeanFactory beanFactory;    /**     * This broker is itself configured by Spring DI, which will     * pass it a reference to the ApplicationContext     */    public void setApplicationContext(ApplicationContext aContext) {     if (!(aContext instanceof ConfigurableApplicationContext)) {      throw new SpringConfiguredObjectBrokerException(        "ApplicationContext [" + aContext +       "] does not implement ConfigurableApplicationContext"        );     }     this.beanFactory =       ((ConfigurableApplicationContext)aContext).getBeanFactory();     }    /**     * creation of any object that we want to be configured by Spring     */    pointcut springConfiguredObjectCreation(          Object newInstance,          SpringConfigured scAnnotation          )     : initialization((@SpringConfigured *).new(..)) &&      this(newInstance) &&      @this(scAnnotation);    /**     * ask Spring to configure the newly created instance     */      after(Object newInstance, SpringConfigured scAnn) returning       : springConfiguredObjectCreation(newInstance,

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