在上篇博客中,我们说了反射的原理和简单应用,这次我们说说反射更深一层的应用,即动态代理。

代理模式

定义

代理模式是为其他对象提供一种代理以控制对这个对象的访问。代理模式分为静态代理和动态代理。

原理

使用一个代理将对象包装起来,然后用该代理对象取代原始对象,任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。
就像如果你们公司想找张艺兴当代言人,需要先联系他的助理,他的助理如果觉得你们公司太小了,那就回绝了。至于有没有必要或者何时把这件事告诉张艺兴,这就取决于代理了。这就是现实中的代理模式。

静态代理

特点

静态代理的代理类和目标对象类都是在编译期确定下来的,所以不利于程序的扩展。而且,每一个代理类只能为一个接口服务,这样一来程序开发中必然产生过多的代理。

代码实现

过程大致是这样的:
(1)被代理类(actor)出现。
(2)代理类(agent)出现,并与被代理类产生关系。(通过实现同一个接口产生联系)
(3)代理类执行方法。(判断是否接受代言的方法)

动态代理

特点

动态代理是在程序运行时根据需要动态创建目标类的代理对象,客户可通过代理类来调用其它对象的方法。动态代理加入了反射,肯定会比静态代理先进一点。

代码实现

执行思路和静态代理是一样的:
(1)被代理类出现。
(2)代理类出现,并与被代理类建立关联。
(3)代理类执行方法。(main函数中调用代理类的方法,代理类处调用被代理类的方法)

两者比较

我们可以看出来,在静态代理中,代理调用的是decide()方法,如果还想实现jump()方法,需写另一个代理类。
在动态代理中调用的是invoke()方法。如果也想再实现jump()方法,只需在调用类中新增就好,不用重新代理类。
这就像小明想找家政阿姨帮忙做家务,静态代理是:打扫卫生找个阿姨,做饭找个阿姨,洗衣服找个阿姨……。动态代理是只找一个管家阿姨,打扫卫生、做饭、洗衣服都是她一个人做。

【java反射】简单说说静态代理和动态代理相关推荐

  1. 第六周 Java语法总结_设计原则_工厂模式_单例模式_代理模式(静态代理_动态代理)_递归_IO流_网络编程(UDP_TCP)_反射_数据库

    文章目录 20.设计原则 1.工厂模式 2.单例模式 1)饿汉式 2)懒汉式 3.Runtime类 4.代理模式 1)静态代理 2)动态代理 动态代理模板 21.递归 22.IO流 1.File 2. ...

  2. java静态代理与动态代理简单分析

    原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5860749.html 1.动态代理(Dynamic Proxy) 代理分为静态代理和动态代理 ...

  3. 【java项目实战】代理模式(Proxy Pattern),静态代理 VS 动态代理

    这篇博文,我们主要以类图和代码的形式来对照学习一下静态代理和动态代理.重点解析各自的优缺点. 定义 代理模式(Proxy Pattern)是对象的结构型模式,代理模式给某一个对象提供了一个代理对象,并 ...

  4. JAVA的静态代理与动态代理比较--转载

    扩展:http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/JAVA的静态代理与动态代理比较 一.概念 代理模式是常用的Java 设计模式,它的特 ...

  5. 什么是代理模式?代理模式有什么用?通过一个小程序分析静态代理和动态代理。自己简单实现动态代理。JDK动态代理和CGLIB动态代理的区别。

    1. 代理模式有什么用 ①功能增强,在实现目标功能的基础上,又增加了额外功能.就像生活中的中介一样,他跟两边客户会有私下的交流. ②控制访问,代理不让用户直接和目标接触.就像中间商一样,他们不会让我们 ...

  6. Java静态代理、动态代理与CGLib代理

    java的动态代理举足轻重,它同反射原理一直是许多框架的底层实现.今天唠一下. 一.代理模式 代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标 ...

  7. 浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试

    文章目录 Java的静态代理 静态代理的优缺点 ABAP的静态代理 Spring AOP的动态代理 JDK动态代理的优缺点 CGLIB动态代理的优缺点 ABAP CGLIB的模拟实现 ABAP Pre ...

  8. Java设计模式(五)代理设计模式—静态代理—JDK动态代理—Cglib动态代理

    文章目录 什么是代理模式 代理模式应用场景 代理的分类 静态代理 什么是静态代理 深入解析静态代理 小结 动态代理 什么是动态代理 JDK动态代理 原理和实现方式 代码实现 优缺点 Cglib动态代理 ...

  9. 一篇文章让你搞懂Java中的静态代理和动态代理

    文章目录 什么是代理模式 代理的优缺点 静态代理 动态代理 InvocationHandler 接口 和 invoke 方法介绍 静态代理和动态代理的区别 什么是代理模式 代理模式是常用的java设计 ...

最新文章

  1. css background-position
  2. c语言将一个已知头结点的单链表逆序_C语言实现常用数据结构:静态链表数组实现(第5篇)...
  3. wordpress 301重定向 htaccess
  4. php 超大整数计算,PHP int 超大溢出整数的 加减运算函数,如果有更好的方法欢迎探讨...
  5. coalesce函数_什么是SQL Server COALESCE()函数?
  6. Mac上Spotify 音乐添加到 djay Pro的详细教程
  7. IntelliJ IDEA集成Maven
  8. 浏览器是如何工作的:Chrome V8让你更懂JavaScript
  9. 快速启动工具入门——以Launchy为例(一)
  10. ie8 升级页面html,IE9及以下浏览器升级提示
  11. 【语义分割专题】语义分割相关工作--SegNet
  12. 【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:3.2 分式化简。设计算法,将一个给定的真分数化简为最简分数形式。例如,将6/8化简为3/4
  13. 计算机始业课教案,始业课教案
  14. 简要介绍无刷电机的基础知识
  15. 美国大厂码农薪资曝光:年薪18万美元,够养家,不够买海景房
  16. 【图】公路车为什么最好不要用脚撑
  17. XDUOJ题解合集(待填坑)
  18. 企业微信的IM架构设计揭秘:消息模型、万人群、已读回执、消息撤回等
  19. python屏幕录制与回放_使用Python来做一个屏幕录制工具的操作代码
  20. C对接国际验证码接口DEMO示例

热门文章

  1. EXCEL自定义函数 VLOOKUP的变体(从最右边找值,找到之后返回左边的值)
  2. FPGA基础测试题 verilog
  3. 【直播预告】SDWAN+安全,如何帮助企业组建安全智能的自有网络
  4. zabbix===》微信报警、聚合图形、自动发现自动注册、监控NFS、MySQL、web服务、URL地址
  5. echars的简单使用
  6. 跟面试官谈【线程池】
  7. BFF——服务于前端的后端
  8. Android中的数据存储
  9. mysql提取日期中的年月
  10. 华为云总裁郑叶来:工业互联网的核心是工业而不是互联网