动态代理的步骤:

  1. 创建一个实现了 InvocationHandler 接口的类,必须重写接口里的 invoke()方法。
  2. 创建被代理的类和接口
  3. 通过 Proxy 的静态方法 newProxyInsatance(ClassLoader loader,Class[] interfaces,InvocationHandler,handler) 来创建一个代理
  4. 通过代理来调用方法

简单的动态代理实例

  1 package com.sean.zzzjvm;
  2
  3 import java.lang.reflect.InvocationHandler;
  4 import java.lang.reflect.Method;
  5 import java.lang.reflect.Proxy;
  6
  7 /** * * @Author Sean * @Date 2017/8/20 21:43. * @Version */
  8 public class DynamicProxyTest {
  9
 10     // 定义一个接口
 11     interface IHello{
 12         void sayHello();
 13     }
 14
 15     // 实现该接口的类
 16     static class Hello implements IHello{
 17
 18         @Override
 19         public void sayHello() {
 20             System.out.println("hello world");
 21         }
 22     }
 23
 24     // 创建一个动态代理类,实现 InvocationHandler 接口
 25     static class DynamicProxy implements InvocationHandler{
 26         Object originalObj;
 27
 28         // 创建一个代理的方法,在 new DynamicProxy().bind(new Hello()); 执行
 29         Object bind (Object originalObj){
 30             this.originalObj = originalObj;
 31             // 返回一个代理对象
 32             return Proxy.newProxyInstance(originalObj.getClass().getClassLoader(),
 33                     originalObj.getClass().getInterfaces(),this);
 34         }
 35
 36         // 默认重写的方法,在 hello.sayHello() 执行
 37         @Override
 38         public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
 39             System.out.println("welcome");
 40             return method.invoke(originalObj,args);
 41         }
 42     }
 43
 44     public static void main(String[] args){
 45         // IHello hello = new Hello();
 46         // 调用动态代理的方法
 47          IHello hello = (IHello) new DynamicProxy().bind(new Hello());
 48         hello.sayHello();
 49     }
 50
 51 }

转载于:https://www.cnblogs.com/ios9/p/7473216.html

一个简单 JDK 动态代理的实例相关推荐

  1. aop实现原理 - JDK动态代理(实例+源码解析)

    动态代理: jdk代理-基于接口代理 通过 类:java.lang.reflect.Proxy 生成动态代理类 实现 接口:InvocationHandler 只能基于接口进行动态代理 代码实现: 1 ...

  2. python ip动态代理_给自己的爬虫做一个简单的动态代理池

    使用代理服务器一直是爬虫防BAN最有效的手段,但网上的免费代理往往质量很低,大部分代理完全不能使用,剩下能用的代理很多也只有几分钟的寿命,没法直接用到爬虫项目中. 下面简单记录一下我用scrapy+r ...

  3. python爬虫系列:做一个简单的动态代理池

    自动 1.设置动态的user agent 1 import urllib.request as ure 2 import urllib.parse as upa 3 import random 4 f ...

  4. Javassist实现JDK动态代理

    提到JDK动态代理,相信很多人并不陌生.然而,对于动态代理的实现原理,以及如何编码实现动态代理功能,可能知道的人就比较少了.接下一来,我们就一起来看看JDK动态代理的基本原理,以及如何通过Javass ...

  5. JDK动态代理为什么必须要基于接口?

    前几天的时候,交流群里的小伙伴抛出了一个问题,为什么JDK的动态代理一定要基于接口实现呢? 好的安排,其实要想弄懂这个问题还是需要一些关于代理和反射的底层知识的,我们今天就盘一盘这个问题,走你~ 一个 ...

  6. 仿照java的jdk动态代理实现go语言动态代理

    仿照java的jdk动态代理实现go语言动态代理 通过学习java的jdk动态代理和Cglib动态代理,仿照jdk动态代理用go实现了一个简单的动态代理 结构型模式 代理模式 代理模式中分为静态代理和 ...

  7. (转)面试必备技能:JDK动态代理给Spring事务埋下的坑!

    一.场景分析 最近做项目遇到了一个很奇怪的问题,大致的业务场景是这样的:我们首先设定两个事务,事务parent和事务child,在Controller里边同时调用这两个方法,示例代码如下: 1.场景A ...

  8. java jdk动态代理 cglib动态代理demo

    最近在研究java动态代理这块,以前也看了很多次java动态代理,感觉一直不是怎么明白,这两天看了看又明白了些,现给出我参考网上写的一个demo jdk动态代理实现: View Code import ...

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

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

最新文章

  1. 网络流最大流 Dinic算法模板
  2. S01E05 Android体系结构
  3. JavaScript从入门到放弃 -(七)ES6
  4. 如何使柱状图左右展示_Excel多次层柱状图,让数据展示更清晰,简单五步就完成...
  5. linux上NFS性能参数
  6. 防不胜防!微信借钱语音确认仍被骗:我可真是太难了
  7. java 反射 main_java – 通过反射访问main方法中的局部变量
  8. 在苹果Mac中巧用聚焦搜索Spotlight
  9. 【动画消消乐 】一个小清新类型的全局网页过渡动画 075
  10. [转]各种配置管理工具的比较
  11. 【论文翻译】 Residual Networks Behave Like Ensembles of Relatively Shallow Networks
  12. python爬取作品集_Python爬虫爬取哈利波特小说集,并用数据可视化剖析登场人物...
  13. Spark应用启动报错:Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
  14. 【Python】在字符串的头尾做文本匹配
  15. win7 报错 failed to install servicefailed installing
  16. 崔斯坦和依索德(Tristan and Isolde)
  17. 推荐一个免费获得Q币的方法!
  18. 编写程序,实现一个基于面向思想的、具有开户、查询、取款、存款、转账、锁定、解锁和退出功能的银行管理系统。
  19. WorkFlow工作流
  20. 克劳特法matlab,经验模式分解matlab

热门文章

  1. 【操作系统】线程的实现-思维导图
  2. 网络七层协议_IT人计算机网络浅析
  3. python 生成器 迭代器 区别_Python生成器和迭代器的区别
  4. Shell文件读取方法集锦
  5. 使用python来操作hive(通过 pyhs2 和 HiveServer2)
  6. Linq 三表 left join 的实现
  7. 百度App网络深度优化系列(一):DNS优化
  8. js设置radio 和checkbox 单选
  9. java 多线程 一个博客
  10. linux ACL应用学习