java设计模式-动态代理(InvocationHandler)
动态代理
利用反射机制在运行时创建代理类。
接口、被代理类不变,我们构建一个handler类来实现InvocationHandler接口。
实现类里有三个部分
1、被代理类
2、构造方法,主要是给被代理类赋值
3、invoke方法,三个参数:代理类、方法和参数
如果要在执行方法前后做一些其他处理,就在该方法中实现
代码实现
1、代理类WorkHandler
package com.zhouzy.sjms.service;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;public class WorkHandler implements InvocationHandler {private Object object;//被代理类public WorkHandler(){}public WorkHandler(Object object){this.object = object;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {System.out.println("执行前要做的事情==============");Object invoke = method.invoke(object, args); //记住,这里的第一个参数是被代理类System.out.println("执行后要做的事情==============");return invoke;}}
2、接口
package com.zhouzy.sjms.service;public interface CommonInterface {//public void doProcess();
}
3、实现类
package com.zhouzy.sjms.service;public class Customer implements CommonInterface{@Overridepublic void doProcess() {System.out.println("正在执行中");}}
测试
package com.zhouzy.sjms.service;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;public class Application {public static void main(String[] args) {/*ProxyDo proxyDo = new ProxyDo();proxyDo.doProcess();*/CommonInterface customer = new Customer();//接口定义,前面不要用实现类InvocationHandler proxyHandler = new WorkHandler(customer);//用接口类接收,强转成接口CommonInterface proxy = (CommonInterface)Proxy.newProxyInstance(customer.getClass().getClassLoader(), customer.getClass().getInterfaces(), proxyHandler);proxy.doProcess();}
}
结果:
动态代理具体步骤:
- 通过实现 InvocationHandler 接口创建自己的调用处理器;
- 通过为 Proxy 类指定 ClassLoader 对象和一组 interface 来创建动态代理类;
- 通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型;
- 通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入。
java设计模式-动态代理(InvocationHandler)相关推荐
- 类代理java设计模式---动态代理(简单笔记)
最近研究类代理,稍微总结一下,以后继续补充: 所谓态动代理类是在运行时生成的class,在生成它时,你必须供给一组interface给它,则态动代理类就称宣它实现了这些interface.当然,态动代 ...
- 设计模式总结——代理模式以及java的动态代理
定义 给目标对象一个代理对象,并由代理对象控制对目标对象的引用.联想到生活中就像是海外代购 既然是代理,就说明他要做的事情要比你直接去做要做的多,这就联系到了方法的增强,也就联系到了AOP,面向切面. ...
- [Java|面试] 面试被问Java的动态代理机制,能说说吗
Java的动态代理机制 文章目录 Java的动态代理机制 0. 什么是代理 1.动态代理和静态代理的区别 2. 使用代理的情况 3. 动态代理的构成 4. JDK中的动态代理 5. 手写一个JDK动态 ...
- Proxy 动态代理 InvocationHandler CGLIB MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 代理模式及Java实现动态代理
代理模式 定义:给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象. 代理模式UML图 在上图中: RealSubject 是原对象 ...
- Java设计模式之代理模式(Proxy)
参考http://blog.csdn.net/jianghuxiaoxiami/article/details/3403924 1.代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的 ...
- 看完Java的动态代理技术——Pythoner笑了
Java的动态代理常用来包装原始方法调用,用于增强或改写现有方法的逻辑,它在Java技术领域被广为使用,在阿里的Sofa RPC框架序列化中你能看到它的身影,Hibernate的实体类功能增强也是以动 ...
- 深入理解Java反射+动态代理,java开发面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起在群里探讨技术. 答: ...
- Java特性-动态代理
代理在开发中无处不在: 我们完成一个接口开发A,接口下有很多个实现类,这些类有些共同要处理的部分,比如每一个类都定义了接口A中的方法getXX(String name).我现在想把每次调用某个实现类的 ...
最新文章
- nginx+keepalived 高可用
- C++ 二维数组示例 - 控制台和MFC版
- VCS user guide读书笔记启发篇
- codeforces1553 F. Pairwise Modulo(数学)
- vim选中字符复制/剪切/粘贴
- cmake 学习笔记(一)
- java 同步块_java 同步块(Java Synchronized Blocks)
- 编译GDAL支持OpenCL使用GPU加速
- 寒假作业3(传说中的写软件)
- wps 甘特图_【WPS神技能】在Excel表格中用图表阶梯式的展示任务进程?找甘特图呀...
- awk去除行首行尾空格
- 攻击性Web测试框架(OWTF)是OWASP + PTES的重点,旨在联合优秀的工具使渗透测试更加高效,主要由Python编写
- 传奇服务器修改二级密码,找回传奇玩家账号和二级密码,修改密码和密保
- 可靠性计算python库
- Windows 64位安装 memcached
- php导出doc文件_php生成word文档并下载
- 隔壁班的 女同学 觉得这本技术书还挺棒的
- php 微信模拟登陆给用户发送消息(文字,图片,图文)
- 搞定各种IE兼容问题,IE6,IE7,IE8,IE9,IE10 -
- sql内连接、左连接、右连接以及全连接查询