笑话两则- -| 回首页 | 2004年索引 | - -AOP的困境

直接调用ProxyFactoryBean- -

                                      

按照Spring的标准做法,需要AOP能力的组件是要逐个配置的。通常的做法是配置一个ProxyFactoryBean组件,并将target、interceptor和intercepted interfaces都配置进去,然后获得这个组件时就可以得到附加了动态代理的组件。这种做法稍微有点麻烦。我们的拦截对象是明确的(所有service组件)、拦截器是明确的(事务管理器、Observer),我希望在Service Locator里面给所有的service组件加上动态代理,用同样的拦截器来拦截它们,而不要逐个去配置。
 
下列代码直接调用Spring的ProxyFactoryBean来创建一个附加了动态代理的组件:
/*
 * Project: Spring AOP Sample
 * Created on 2004-3-16
 */
package org.groller.aop;
import junit.framework.TestCase;
import org.springframework.aop.framework.ProxyFactoryBean;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import testmodel.IService;
import testmodel.ServiceImpl;
/**
 * @author gigix
 * xiongjie@csdn.net
 */
public class ServiceProxyTest extends TestCase {
 public void testProxyFactory() {
  BeanFactory bf = new XmlBeanFactory(getClass().getClassLoader().getResourceAsStream("application.bean.xml"));
  
  ProxyFactoryBean factory = new ProxyFactoryBean();
  factory.setTarget(new ServiceImpl());
  factory.setInterfaces(new Class[]{IService.class});
  factory.setInterceptorNames(new String[]{"interceptor1", "interceptor2"});
  factory.setBeanFactory(bf);
  
  IService service = (IService) factory.getObject();
  service.sayHello();
 }
}
需要注意的是,factory.setBeanFactory()方法必须最后一个调用,因为在调用这个方法时,ProxyFactoryBean就会做提前读取(eager load),如果其他几个属性还没有设置好,调用这个方法就会出错。
 
把这段代码抽取一下,放在Service Locator中,就可以把我们的整个拦截器机制切换到AOP-Alliance API上。我们的每个拦截器(现在只有事务管理器和Observer模式管理器)都继承MethodInterceptor,aspect就真正分离出来了。这是G-Roller框架的一个重大进步,哈哈~~~~

- 作者: gigix 2004年03月16日, 星期二 20:45

Trackback

你可以使用这个链接引用该篇日志 http://publishblog.blogdriver.com/blog/tb.b?diaryID=85309

博客手拉手

回复

- 评论人:zmfnpqmy

Thu May 17 05:21:30 CST 2007  作者邮箱  作者Blog

mxxwxwmesn[url=http://zvore.yi.org/82177478.html]brazilian pussy[/url][url=http://xenggi.66ghz.com/46330167.html]gun games[/url][url=http://wxaxw.22web.net/34298878.html]tatoo designs[/url][url=http://www32.websamba.com/viora/94041272.html]model com[/url][url=http://uenvc.22web.net/16709694.html]football games[/url][url=http://ninfrb.yi.org/20352297.html]blades glory cam xvid mvs[/url]

- 评论人:okctuftv

Thu May 17 01:21:11 CST 2007  作者邮箱  作者Blog

slxwxwmezk[url=http://zvore.yi.org/82177478.html]brazilian pussy[/url][url=http://xenggi.66ghz.com/46330167.html]gun games[/url][url=http://wxaxw.22web.net/34298878.html]tatoo designs[/url][url=http://www32.websamba.com/viora/94041272.html]model com[/url][url=http://uenvc.22web.net/16709694.html]football games[/url][url=http://ninfrb.yi.org/20352297.html]blades glory cam xvid mvs[/url]

- 评论人:charon

Wed Mar 17 09:16:53 CST 2004 

如果要拦截的是所有组件,spring里面有预定义的做法。我好像在读文档的时候读到过,不过他这个比较狠的是拦截所有出现在这个xml配置文件中的组件,不管你是不是service。

评论内容: