何谓动态代理呢?

先说说代理模式吧。


当调用某个代理对象方法的时候,其实它间接的去调用委托类的方法。

代理模式的作用是:

  • 远程代理,就是为一个对象在不同地址空间提供局部代表,这样就可以隐藏一个对象存在不同地址空间的事实。android中的AIDL就是典型的例子。
  • 虚拟代理 代理类实例化的时间比较长,如加载图片,在图片还来不及加载的时候,虚拟代理替换真实的图片
  • 安全代理 控制访问代理类的权限

按照代理的创建时期,代理类可以分为两种:

  • 静态:由程序员创建代理类或特定工具自动生成源代码再对其编译。在程序运行前代理类的.class文件就已经存在了。代理对象和实际执行对象(委托类)之间是耦合的。

  • 动态:在程序运行时运用反射机制动态创建而成

动态代理使用有两个外部显著特点:

  • 借助Proxy.newProxyInstance可以生成一个代理对象,这个代理对象是根据接口动态实例化生成的,
  • 实现InvocationHandler的invoke方法来拦截对上面代理对象方法调用的动作。在该方法里是执行真正工作的地方。在这个invoke里我们能够拿到 “所调用方法的详细信息”,“所传入的参数”,以及“代理对象本身的引用”。

动态代理例子:

public class DynamicProxyTest2 {public static void main(String[] args) {Dog realDog = new ChinaDog();Dog proxyDog = (Dog) Proxy.newProxyInstance(Dog.class.getClassLoader(), new Class[] { Dog.class },new MyInvocationHandler(realDog));proxyDog.run();}
}interface Dog {void run();
}class ChinaDog implements Dog {@Overridepublic void run() {Utils.p("中华田园犬开始奔跑了===>");}
}class MyInvocationHandler implements InvocationHandler {Dog realTarget;public MyInvocationHandler(Dog target) {this.realTarget = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {ExtraWork.beforeInvokeMethod();Object result = method.invoke(realTarget, args);ExtraWork.afterInvokeMethod();return result;}
}class ExtraWork {public static void beforeInvokeMethod() {Utils.p("\"奔跑\"执行前的工作");}public static void afterInvokeMethod() {Utils.p("\"奔跑\"执行后的工作");}
}

【java】用户动态代理相关推荐

  1. 代理模式及Java实现动态代理

    代理模式 定义:给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象. 代理模式UML图 在上图中: RealSubject 是原对象 ...

  2. 看完Java的动态代理技术——Pythoner笑了

    Java的动态代理常用来包装原始方法调用,用于增强或改写现有方法的逻辑,它在Java技术领域被广为使用,在阿里的Sofa RPC框架序列化中你能看到它的身影,Hibernate的实体类功能增强也是以动 ...

  3. 设计模式总结——代理模式以及java的动态代理

    定义 给目标对象一个代理对象,并由代理对象控制对目标对象的引用.联想到生活中就像是海外代购 既然是代理,就说明他要做的事情要比你直接去做要做的多,这就联系到了方法的增强,也就联系到了AOP,面向切面. ...

  4. java的动态代理机制详解

    2019独角兽企业重金招聘Python工程师标准>>> 参考资料 1.java的动态代理机制详解 转载于:https://my.oschina.net/Howard2016/blog ...

  5. 深入理解Java反射+动态代理,java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起在群里探讨技术. 答: ...

  6. Java特性-动态代理

    代理在开发中无处不在: 我们完成一个接口开发A,接口下有很多个实现类,这些类有些共同要处理的部分,比如每一个类都定义了接口A中的方法getXX(String name).我现在想把每次调用某个实现类的 ...

  7. java CGLIB动态代理

    CGLIB动态代理 一:CGLIB(Code Generation Library)是一个基于ASM的字节码生成库,它允许我们在运行时对字节码进行修改和动态生成.CGLIB通过继承方式实现代理. 二: ...

  8. Java - JDK动态代理原理

    Java - JDK动态代理原理 前言 一. JDK动态代理源码分析 1.1 生成目标代理类 getProxyClass0 1.1.1 KeyFactory 生成接口的虚引用 1.1.2 ProxyC ...

  9. [Java|面试] 面试被问Java的动态代理机制,能说说吗

    Java的动态代理机制 文章目录 Java的动态代理机制 0. 什么是代理 1.动态代理和静态代理的区别 2. 使用代理的情况 3. 动态代理的构成 4. JDK中的动态代理 5. 手写一个JDK动态 ...

最新文章

  1. 职场,18个细节决定成败[转载]
  2. 树莓派文件服务器nas,树莓派搭建NAS服务器
  3. logrotate 进行nginx日志分割
  4. android qq分享自动弹出,史上最详细Android集成QQ,微信,微博分享(不要第三方)持续更新中...
  5. 三个变量中怎么找出中间值_一文理解神经网络中的偏差和方差
  6. HDU - 1542 Atlantis(线段树+扫描线)
  7. mysql自增_面试官:为什么 MySQL 的自增主键不单调也不连续?
  8. C语言转义字符的使用
  9. 老男孩和门户网站学生聊天整理
  10. (40)FPGA原语设计(ODDR)
  11. python字符串的方法和列表的方法_python字符串,列表,字符串,元组,集合的一些方法...
  12. java成员方法tostring_Java 工具类-toString
  13. 【Angular中的RxJS】- Subject 分类介绍
  14. Unity 钓鱼玩法的初步实现
  15. 一张图说明softmax layer是什么
  16. 计算机网络学习笔记(3.数据链路层 4.网络层)
  17. web前端介绍_html-超文本标记语言
  18. DIY强大的虚拟化环境-规划思路框架
  19. 做流程图软件有哪些?来看看今天的分享
  20. javascript bool 强制类型转换

热门文章

  1. python用print函数打印皮卡丘_Python学习之print()函数
  2. shell脚本按行读取文件的几种方式
  3. 《领域特定语言》一2.3DSL的问题
  4. openGL 坐标系的互相转换
  5. DX:ASPxGridView使用选择事件的前置条件
  6. Maven和Gradle对比
  7. python模块之HTMLParser之穆雪峰的案例(理解其用法原理)
  8. 体绘制(Volume Rendering)概述之4:光线投射算法(Ray Casting)实现流程和代码(基于CPU的实现)...
  9. 给你的博客添加个看电影的频道
  10. selenium+Headless Chrome实现不弹出浏览器自动化登录