美文网首页
有关动态代理

有关动态代理

作者: 34sir | 来源:发表于2018-02-08 16:45 被阅读8次

代理模式的作用

方法的增强,不修改源码的情况下增强一些方法,在方法执行前后做任意事,解耦

简单的比喻,就像房主(委托)和中介(受委托)的关系,中介替房主物色买家(方法执行前),房主签定卖房合约过户等(方法执行),中介替你完成余下的手续(方法执行后)。解耦之处在于:房主从头到尾只需要完成签合约,其他琐事交给中介。

静态代理

动态代理之前先理解静态代理。

直接看代码:

image

LimbsShower:“动物”们统一实现的接口,“展示他们的肢体”

image image

以上实现鸡和鱼两种动物。

image

ShowerProxy:静态代理类

代理模式的好处体现在图中1和2处,这两处你可以随意加上功能,恣意而为,已实现不对具体实现类进行修改的情况下对showLimbs方法的功能拓展,并且解耦。

有过项目开发经验的同学肯定会发现,静态代理存在严重的弊端,不够灵活,房产中介只能负责房子相关的事,一旦需要代理的类变多,代理类就会相应的增多,比如说猎头这类中介,这样会导致代码量的几何式上涨,于是动态代理应运而生!

动态代理

以上用“动物”说明了静态代理的好处和弊端,接下来我们实现一组“图形”类,对比动态代理和静态代理。

image

GraphShower:图形类的实现类,“展示他们的边数”

image image

以上实现圆形和正方形两种图形类

image

ProxyHandler:本文主角,动态代理类。

要点:实现InvocationHandler接口并重写invoke方法,Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),this),通过反射机制获取到收代理的对象。图中1和2处与上文同理,恣意而为。

以下为测试代码:

image

由上可知完成对“动物”和“图形”两类的代理只需ProxyHandler一个动态代理类即可,而如果要采用静态代理的方式,必须再实现一个诸如GraphShowerProxy的代理类专门代理“图形”类(文中没有实现)。两相对比,动态代理优势显而易见。

demo地址:https://github.com/34sir/TrendsProxyDemo

这里附上一个Retrofit的源码分析:http://bxbxbai.github.io/2015/12/13/retrofit2/,其重要的一个实现原理就是动态代理,当然其中还涉及到很多设计模式,有兴趣可以一起探讨。

以上如有错误或者不足的地方,望不吝赐教。

相关文章

  • 有关动态代理

    代理模式的作用 方法的增强,不修改源码的情况下增强一些方法,在方法执行前后做任意事,解耦 简单的比喻,就像房主(委...

  • Spring学习(五)AOP

    SpringAop使用到了了动态代理模式(有关设计模式见设计模式章节)。JDK动态代理代理的目标类必须要实现接口。...

  • 面试系列~动态代理实现与原理

    动态代理有JDK动态代理, CGLIB动态代理, SpringAOP动态代理 一,JDK动态代理  jdk动态代理...

  • JAVA动态代理探究

    前言 本文是我在学习代理模式时的一篇笔记,除了对代理模式、静态和动态代理的概念和实现进行了描述外,还有关于动态代理...

  • 编程常用的设计模式

    动态代理和静态代理 静态代理 动态代理 静态代理与动态代理的区别 JDK中的动态代理和CGLIB 实现动态代理的方...

  • Spring的AOP原理分析

    一 动态代理 动态代理分为JDK动态代理和CGLIB动态代理 jdk动态代理 被代理类(目标类)和代理类必须实现同...

  • 设计模式之代理模式

    代理分为静态代理和动态代理。 动态代理又包括基于JDK的动态代理、基于CGlib 的动态代理、基于Aspectj实...

  • Java高级主题(五)——动态代理

    代理可以分为静态代理、动态代理,动态代理又可以分为 jvm的动态代理 和 cglib的动态代理。像spring框架...

  • 动态代理

    动态代理分为两类:1、基于接口的动态代理; (JDK动态代理 )2、基于类的动态代理;(cglib动态代理)3、J...

  • 动态代理的两种方式

    静态代理就不说了,基本用到的都是动态代理。 Java中动态代理有JDK动态代理和CGLIB动态代理。 JDK代理的...

网友评论

      本文标题:有关动态代理

      本文链接:https://www.haomeiwen.com/subject/gcittftx.html