【java】用户动态代理
何谓动态代理呢?
先说说代理模式吧。
当调用某个代理对象方法的时候,其实它间接的去调用委托类的方法。
代理模式的作用是:
- 远程代理,就是为一个对象在不同地址空间提供局部代表,这样就可以隐藏一个对象存在不同地址空间的事实。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】用户动态代理相关推荐
- 代理模式及Java实现动态代理
代理模式 定义:给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象. 代理模式UML图 在上图中: RealSubject 是原对象 ...
- 看完Java的动态代理技术——Pythoner笑了
Java的动态代理常用来包装原始方法调用,用于增强或改写现有方法的逻辑,它在Java技术领域被广为使用,在阿里的Sofa RPC框架序列化中你能看到它的身影,Hibernate的实体类功能增强也是以动 ...
- 设计模式总结——代理模式以及java的动态代理
定义 给目标对象一个代理对象,并由代理对象控制对目标对象的引用.联想到生活中就像是海外代购 既然是代理,就说明他要做的事情要比你直接去做要做的多,这就联系到了方法的增强,也就联系到了AOP,面向切面. ...
- java的动态代理机制详解
2019独角兽企业重金招聘Python工程师标准>>> 参考资料 1.java的动态代理机制详解 转载于:https://my.oschina.net/Howard2016/blog ...
- 深入理解Java反射+动态代理,java开发面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起在群里探讨技术. 答: ...
- Java特性-动态代理
代理在开发中无处不在: 我们完成一个接口开发A,接口下有很多个实现类,这些类有些共同要处理的部分,比如每一个类都定义了接口A中的方法getXX(String name).我现在想把每次调用某个实现类的 ...
- java CGLIB动态代理
CGLIB动态代理 一:CGLIB(Code Generation Library)是一个基于ASM的字节码生成库,它允许我们在运行时对字节码进行修改和动态生成.CGLIB通过继承方式实现代理. 二: ...
- Java - JDK动态代理原理
Java - JDK动态代理原理 前言 一. JDK动态代理源码分析 1.1 生成目标代理类 getProxyClass0 1.1.1 KeyFactory 生成接口的虚引用 1.1.2 ProxyC ...
- [Java|面试] 面试被问Java的动态代理机制,能说说吗
Java的动态代理机制 文章目录 Java的动态代理机制 0. 什么是代理 1.动态代理和静态代理的区别 2. 使用代理的情况 3. 动态代理的构成 4. JDK中的动态代理 5. 手写一个JDK动态 ...
最新文章
- 职场,18个细节决定成败[转载]
- 树莓派文件服务器nas,树莓派搭建NAS服务器
- logrotate 进行nginx日志分割
- android qq分享自动弹出,史上最详细Android集成QQ,微信,微博分享(不要第三方)持续更新中...
- 三个变量中怎么找出中间值_一文理解神经网络中的偏差和方差
- HDU - 1542 Atlantis(线段树+扫描线)
- mysql自增_面试官:为什么 MySQL 的自增主键不单调也不连续?
- C语言转义字符的使用
- 老男孩和门户网站学生聊天整理
- (40)FPGA原语设计(ODDR)
- python字符串的方法和列表的方法_python字符串,列表,字符串,元组,集合的一些方法...
- java成员方法tostring_Java 工具类-toString
- 【Angular中的RxJS】- Subject 分类介绍
- Unity 钓鱼玩法的初步实现
- 一张图说明softmax layer是什么
- 计算机网络学习笔记(3.数据链路层 4.网络层)
- web前端介绍_html-超文本标记语言
- DIY强大的虚拟化环境-规划思路框架
- 做流程图软件有哪些?来看看今天的分享
- javascript bool 强制类型转换
热门文章
- python用print函数打印皮卡丘_Python学习之print()函数
- shell脚本按行读取文件的几种方式
- 《领域特定语言》一2.3DSL的问题
- openGL 坐标系的互相转换
- DX:ASPxGridView使用选择事件的前置条件
- Maven和Gradle对比
- python模块之HTMLParser之穆雪峰的案例(理解其用法原理)
- 体绘制(Volume Rendering)概述之4:光线投射算法(Ray Casting)实现流程和代码(基于CPU的实现)...
- 给你的博客添加个看电影的频道
- selenium+Headless Chrome实现不弹出浏览器自动化登录