美文网首页设计模式
动态代理模式详解(简单描述)

动态代理模式详解(简单描述)

作者: 激情的狼王 | 来源:发表于2017-11-01 15:28 被阅读0次

根据上篇《java静态代理详解》的介绍,你会发现每个代理类只能为一个接口服务,这样程序开发中必然会产生许多的代理类
所以我们就会想办法可以通过一个代理类完成全部的代理功能,那么我们就需要用动态代理

在上篇的示例中,一个代理只能代理一种类型,而且是在编译器就已经确定被代理的对象。而动态代理是在运行时,通过反射机制实现动态代理,并且能够代理各种类型的对象(动态的);

具体实现类

QQ图片20171101152540.png

代理类

QQ图片20171101152659.png

客户端代码

QQ图片20171101152753.png

可以看到,我们可以通过LogHandler代理不同类型的对象,如果我们把对外的接口都通过动态代理来实现,那么所有的函数调用最终都会经过invoke函数的转发,因此我们就可以在这里做一些自己想做的操作,比如日志系统、事务、拦截器、权限控制等。这也就是AOP(面向切面编程)的基本原理。

动态代理的优缺点
优点:
动态代理与静态代理相比较,最大的好处是接口中声明的所有方法都被转移到调用处理器一个集中的方法中处理(InvocationHandler.invoke)。这样,在接口方法数量比较多的时候,我们可以进行灵活处理,而不需要像静态代理那样每一个方法进行中转。在本示例中看不出来,因为invoke方法体内嵌入了具体的外围业务(记录任务处理前后时间并计算时间差),实际中可以类似Spring AOP那样配置外围业务。
缺点:
诚然,Proxy 已经设计得非常优美,但是还是有一点点小小的遗憾之处,那就是它始终无法摆脱仅支持 interface 代理的桎梏,因为它的设计注定了这个遗憾。回想一下那些动态生成的代理类的继承关系图,它们已经注定有一个共同的父类叫 Proxy。Java 的继承机制注定了这些动态代理类们无法实现对 class 的动态代理,原因是多继承在 Java 中本质上就行不通。

相关文章

  • 动态代理模式详解(简单描述)

    根据上篇《java静态代理详解》的介绍,你会发现每个代理类只能为一个接口服务,这样程序开发中必然会产生许多的代理类...

  • 六大原则 动态代理

    参考 六大原则 代理模式 介绍了三种代理:静态代理、Proxy、cglib java 动态代理详解介绍了动态代理具...

  • Java 动态代理

    java的动态代理机制详解 JDK动态代理详解 Java核心技术点之动态代理

  • Java面试——Java

    参考资料:[1]. Java三种代理模式:静态代理、动态代理和cglib代理[2]. AQS简简单单过一遍 描述下...

  • 动态代理jdk和cglib的区别

    动态代理的描述在前两篇文章已经做了一部分描述动态代理的详细解读和动态代理的简单描述,JDK的动态代理只能针对实现了...

  • 什么是代理模式

    公众号:程序员面试经验分享(jobbible) 代理模式详解 1什么是代理模式? 一句话描述:代理模式是一种使用代...

  • JAVA动态代理探究

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

  • java反射和动态代理

    java动态代理Proxy.newProxyInstance 详解java代理机制(静态代理、动态代理)以及使用场景

  • Proxy - 代理模式

    注意:全文是基于Java来描述和实现的!代理模式的实现有很多种方法:静态代理,动态代理(又分为反射实现的动态代理,...

  • java动态代理和CGLIB动态代理

    动态代理 Java 动态代理详解[https://www.cnblogs.com/whirly/p/1015488...

网友评论

    本文标题:动态代理模式详解(简单描述)

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