5.SpringAop之编程式Aop:ProxyFactory

在讲DefaultAdvisorAutoProxyCreator之前,先讲解下ProxyFactory,因为DefaultAdvisorAutoProxyCreator内部生成代理用的就是ProxyFactory

1.类继承结构

ProxyFactory

和ProxyFactoryBean基本相似

2.解析

ProxyFactory在继承了ProxyCreatorSupport之后,只要在生成代理前配置好代理对象,代理接口以及通知/通知器/拦截器,然后调用ProxyCreatorSupport的createAopProxy方法得到适配的AopProxy,在调用AopProxy的getProxy()方法即可得到代理对象,下面看下相关的源码

配置代理对象这些参数,继承了AdivsedSupport之后,默认是都有的,我们看下ProxyFactory其中一个构造函数,都是使用AdivsedSupport里的方法

public ProxyFactory(Object target) {
        setTarget(target);
        setInterfaces(ClassUtils.getAllInterfaces(target));
    }

接下来看生成代理的部分

public Object getProxy(ClassLoader classLoader) {
        return createAopProxy().getProxy(classLoader);
    }

用的是ProxyCreatorSupport中的方法,ProxyFactory和ProxyFactoryBean一样,只是整合了一下
下面我们来看下ProxyFactory使用的例子

3.使用

项目结构为


项目结构

使用方式为

        ProxyFactory proxyFactory =new ProxyFactory();
        proxyFactory.setInterfaces(HelloService.class);
        proxyFactory.setTarget(new HelloServiceImpl());
        proxyFactory.addAdvice(new TestBeforeAdvice());
        proxyFactory.addAdvice(new TestAfterAdvice());
        proxyFactory.addAdvice(new TestAroundAdvice());
        HelloService helloService = (HelloService) proxyFactory.getProxy();
        helloService.bye("scj");
        helloService.hello("scj");

基本上和ProxyFactoryBean差不多,只不过是编程式的
附上代码地址

思考一个问题:为什么声明式要用ProxyFactoryBean,而不能用ProxyFactory,从上面例子就能看出来,我们得到代理对象需要调用getProxy方法,而在spring容器中的对象是直接反射new生成的,所以我们需要用FactoyBean的getObject方法把getProxy方法执行了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,211评论 6 13
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,746评论 25 709
  • 焦虑来自于对任务本身(未知)的恐惧; 对时间越来越快(扑面而来)的恐惧; 焦虑本身没有任何好处,只会带来负面影响。...
    Tim爱运营阅读 368评论 0 0
  • 明日待办: 带以乐被子和室内鞋 今日待办: 1.给阿清,静姐设计传单和发传单,量二元堂广告尺寸(180*80),淘...
    龙卷风227阅读 175评论 0 1