【java反射】简单说说静态代理和动态代理
在上篇博客中,我们说了反射的原理和简单应用,这次我们说说反射更深一层的应用,即动态代理。
代理模式 |
定义
代理模式是为其他对象提供一种代理以控制对这个对象的访问。代理模式分为静态代理和动态代理。
原理
使用一个代理将对象包装起来,然后用该代理对象取代原始对象,任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。
就像如果你们公司想找张艺兴当代言人,需要先联系他的助理,他的助理如果觉得你们公司太小了,那就回绝了。至于有没有必要或者何时把这件事告诉张艺兴,这就取决于代理了。这就是现实中的代理模式。
静态代理 |
特点
静态代理的代理类和目标对象类都是在编译期确定下来的,所以不利于程序的扩展。而且,每一个代理类只能为一个接口服务,这样一来程序开发中必然产生过多的代理。
代码实现
过程大致是这样的:
(1)被代理类(actor)出现。
(2)代理类(agent)出现,并与被代理类产生关系。(通过实现同一个接口产生联系)
(3)代理类执行方法。(判断是否接受代言的方法)
动态代理 |
特点
动态代理是在程序运行时根据需要动态创建目标类的代理对象,客户可通过代理类来调用其它对象的方法。动态代理加入了反射,肯定会比静态代理先进一点。
代码实现
执行思路和静态代理是一样的:
(1)被代理类出现。
(2)代理类出现,并与被代理类建立关联。
(3)代理类执行方法。(main函数中调用代理类的方法,代理类处调用被代理类的方法)
两者比较 |
我们可以看出来,在静态代理中,代理调用的是decide()方法,如果还想实现jump()方法,需写另一个代理类。
在动态代理中调用的是invoke()方法。如果也想再实现jump()方法,只需在调用类中新增就好,不用重新代理类。
这就像小明想找家政阿姨帮忙做家务,静态代理是:打扫卫生找个阿姨,做饭找个阿姨,洗衣服找个阿姨……。动态代理是只找一个管家阿姨,打扫卫生、做饭、洗衣服都是她一个人做。
【java反射】简单说说静态代理和动态代理相关推荐
- 第六周 Java语法总结_设计原则_工厂模式_单例模式_代理模式(静态代理_动态代理)_递归_IO流_网络编程(UDP_TCP)_反射_数据库
文章目录 20.设计原则 1.工厂模式 2.单例模式 1)饿汉式 2)懒汉式 3.Runtime类 4.代理模式 1)静态代理 2)动态代理 动态代理模板 21.递归 22.IO流 1.File 2. ...
- java静态代理与动态代理简单分析
原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5860749.html 1.动态代理(Dynamic Proxy) 代理分为静态代理和动态代理 ...
- 【java项目实战】代理模式(Proxy Pattern),静态代理 VS 动态代理
这篇博文,我们主要以类图和代码的形式来对照学习一下静态代理和动态代理.重点解析各自的优缺点. 定义 代理模式(Proxy Pattern)是对象的结构型模式,代理模式给某一个对象提供了一个代理对象,并 ...
- JAVA的静态代理与动态代理比较--转载
扩展:http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/JAVA的静态代理与动态代理比较 一.概念 代理模式是常用的Java 设计模式,它的特 ...
- 什么是代理模式?代理模式有什么用?通过一个小程序分析静态代理和动态代理。自己简单实现动态代理。JDK动态代理和CGLIB动态代理的区别。
1. 代理模式有什么用 ①功能增强,在实现目标功能的基础上,又增加了额外功能.就像生活中的中介一样,他跟两边客户会有私下的交流. ②控制访问,代理不让用户直接和目标接触.就像中间商一样,他们不会让我们 ...
- Java静态代理、动态代理与CGLib代理
java的动态代理举足轻重,它同反射原理一直是许多框架的底层实现.今天唠一下. 一.代理模式 代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标 ...
- 浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试
文章目录 Java的静态代理 静态代理的优缺点 ABAP的静态代理 Spring AOP的动态代理 JDK动态代理的优缺点 CGLIB动态代理的优缺点 ABAP CGLIB的模拟实现 ABAP Pre ...
- Java设计模式(五)代理设计模式—静态代理—JDK动态代理—Cglib动态代理
文章目录 什么是代理模式 代理模式应用场景 代理的分类 静态代理 什么是静态代理 深入解析静态代理 小结 动态代理 什么是动态代理 JDK动态代理 原理和实现方式 代码实现 优缺点 Cglib动态代理 ...
- 一篇文章让你搞懂Java中的静态代理和动态代理
文章目录 什么是代理模式 代理的优缺点 静态代理 动态代理 InvocationHandler 接口 和 invoke 方法介绍 静态代理和动态代理的区别 什么是代理模式 代理模式是常用的java设计 ...
最新文章
- css background-position
- c语言将一个已知头结点的单链表逆序_C语言实现常用数据结构:静态链表数组实现(第5篇)...
- wordpress 301重定向 htaccess
- php 超大整数计算,PHP int 超大溢出整数的 加减运算函数,如果有更好的方法欢迎探讨...
- coalesce函数_什么是SQL Server COALESCE()函数?
- Mac上Spotify 音乐添加到 djay Pro的详细教程
- IntelliJ IDEA集成Maven
- 浏览器是如何工作的:Chrome V8让你更懂JavaScript
- 快速启动工具入门——以Launchy为例(一)
- ie8 升级页面html,IE9及以下浏览器升级提示
- 【语义分割专题】语义分割相关工作--SegNet
- 【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:3.2 分式化简。设计算法,将一个给定的真分数化简为最简分数形式。例如,将6/8化简为3/4
- 计算机始业课教案,始业课教案
- 简要介绍无刷电机的基础知识
- 美国大厂码农薪资曝光:年薪18万美元,够养家,不够买海景房
- 【图】公路车为什么最好不要用脚撑
- XDUOJ题解合集(待填坑)
- 企业微信的IM架构设计揭秘:消息模型、万人群、已读回执、消息撤回等
- python屏幕录制与回放_使用Python来做一个屏幕录制工具的操作代码
- C对接国际验证码接口DEMO示例