动态代理

利用反射机制在运行时创建代理类。
接口、被代理类不变,我们构建一个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();}
}

结果:

动态代理具体步骤:

  1. 通过实现 InvocationHandler 接口创建自己的调用处理器;
  2. 通过为 Proxy 类指定 ClassLoader 对象和一组 interface 来创建动态代理类;
  3. 通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型;
  4. 通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入。

java设计模式-动态代理(InvocationHandler)相关推荐

  1. 类代理java设计模式---动态代理(简单笔记)

    最近研究类代理,稍微总结一下,以后继续补充: 所谓态动代理类是在运行时生成的class,在生成它时,你必须供给一组interface给它,则态动代理类就称宣它实现了这些interface.当然,态动代 ...

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

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

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

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

  4. Proxy 动态代理 InvocationHandler CGLIB MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

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

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

  6. Java设计模式之代理模式(Proxy)

    参考http://blog.csdn.net/jianghuxiaoxiami/article/details/3403924 1.代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的 ...

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

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

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

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

  9. Java特性-动态代理

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

最新文章

  1. nginx+keepalived 高可用
  2. C++ 二维数组示例 - 控制台和MFC版
  3. VCS user guide读书笔记启发篇
  4. codeforces1553 F. Pairwise Modulo(数学)
  5. vim选中字符复制/剪切/粘贴
  6. cmake 学习笔记(一)
  7. java 同步块_java 同步块(Java Synchronized Blocks)
  8. 编译GDAL支持OpenCL使用GPU加速
  9. 寒假作业3(传说中的写软件)
  10. wps 甘特图_【WPS神技能】在Excel表格中用图表阶梯式的展示任务进程?找甘特图呀...
  11. awk去除行首行尾空格
  12. 攻击性Web测试框架(OWTF)是OWASP + PTES的重点,旨在联合优秀的工具使渗透测试更加高效,主要由Python编写
  13. 传奇服务器修改二级密码,找回传奇玩家账号和二级密码,修改密码和密保
  14. 可靠性计算python库
  15. Windows 64位安装 memcached
  16. php导出doc文件_php生成word文档并下载
  17. 隔壁班的 女同学 觉得这本技术书还挺棒的
  18. php 微信模拟登陆给用户发送消息(文字,图片,图文)
  19. 搞定各种IE兼容问题,IE6,IE7,IE8,IE9,IE10 -
  20. sql内连接、左连接、右连接以及全连接查询

热门文章

  1. 【转帖】关于找工作的鸡零狗碎(续)
  2. mongodb和mysql中自动增长id_如何在java中维护MongoDB的_id字段的自动增长
  3. Jude - 体验UML高速建模
  4. 为什么微信截图无法截取其他软件中的下拉菜单
  5. Mysql数据库to_days()用法
  6. 刷机相关的Android的安全
  7. 大数据到底是干什么用的?
  8. 蓝桥杯算法训练-印章
  9. [ MessAuto ]: 短信验证码自动填充,理论支持所有浏览器或 APP, Only For Mac
  10. 2. Excel数据格式