一个小汽车,有一个跑run()的方法,我们想使用jdk动态代理使小汽车执行run之前 加点油,run之后洗车。

有四个类,接口Car(小汽车)Kayan(具体实现类(卡宴)) CarProxy(汽车的代理) Test(测试类)

Car

public interface Car {public void run();}

Kayan这个是小汽车实现类

public class Kayan implements Car {@Overridepublic void run() {System.out.println("小汽车开始跑。。。。。。。。");}}

CarProxy  小汽车的代理类

public class CarProxy implements InvocationHandler {// 小汽车会被代理private Car car;// 通过set传入小汽车public Car getCar() {return car;}public void setCar(Car car) {this.car = car;}public Car creatCarProxy() {Car proxy = (Car) Proxy.newProxyInstance(car.getClass().getClassLoader(), car.getClass().getInterfaces(), this);return proxy;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {if ("run".equals(method.getName())) {// 小汽车想要跑之前那要先加油啊System.out.println("给小汽车加油啊。。oil。。oil。。oil");Object object = method.invoke(car, args);System.out.println("跑完之后给小汽车擦车啊。。clean。。clean");return object;}return method.invoke(car, args);}}

测试代码

// 测试小汽车的代理
    @Testpublic void testCarProxy() {Car ky = new Kayan();CarProxy proxy = new CarProxy();proxy.setCar(ky);Car carProxy = proxy.creatCarProxy();carProxy.run();}

最后的结果显示

这种实现的思想类似于Spring的Aop的实现思路,但是AOP在使用jdk动态代理的时候也是用CGLib代理 。

转载于:https://www.cnblogs.com/zhanghaoliang/p/6475636.html

JDK动态代理小例子相关推荐

  1. jdk动态代理与cglib动态代理例子

    1.JAVA的动态代理特征:特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代理类的对象 ...

  2. 静态代理,JDK动态代理,Cglib动态代理详解

    目录 一.代理模式 二.静态代理 三.动态代理 3.1 JDK动态代理 3.2 Cglib动态代理 四.两种动态代理区别 一.代理模式 代理模式(Proxy Pattern)是程序设计中的一种设计模式 ...

  3. 谁与争锋,JDK动态代理大战CGLib动态代理

    文章目录 一.前言 二.基本概念 三.JDK 和 CGLib动态代理区别 3.1 JDK动态代理具体实现原理 3.2 CGLib动态代理 3.3 两者对比 3.4 使用注意 四.JDK 和 CGLib ...

  4. 面试造火箭系列,栽在了cglib和jdk动态代理

    代理模式 关于代理模式,查阅比较专业的资料是这么定义的:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上 ...

  5. AOP、ASPECT、Spring AOP、JDK动态代理、CGLib动态代理

    AOP.ASPECT.Spring AOP.JDK动态代理.CGLib动态代理 1 AOP介绍 1.1 基本定义 AOP(Aspect Oriented Programming)称为面向切面编程,它是 ...

  6. 接住喽????,送你个装逼的技能: JDK动态代理

    今天讲一个比较深层的知识点:JDK动态代理,这是个可以让小白在大咖面前装逼的神器,顺便送你一个代理模式的温习机会. 代理模式场景 为了引出动态代理的用法,我们先看看代理设计模式,这能让你了解JDK动态 ...

  7. 【原创】分布式之缓存击穿 【原创】自己动手实现静态资源服务器 【原创】自己动手实现JDK动态代理...

    [原创]分布式之缓存击穿 什么是缓存击穿 在谈论缓存击穿之前,我们先来回忆下从缓存中加载数据的逻辑,如下图所示 因此,如果黑客每次故意查询一个在缓存内必然不存在的数据,导致每次请求都要去存储层去查询, ...

  8. JDK动态代理实现简单AOP--转

    JDK 动态代理是 java 反射的一个重要特性.它在某种方面为 java 提供了动态性的特性,给应用带来了无限的空间.大名鼎鼎的 Hessian . Spring AOP 基于动态代理实现.本文将简 ...

  9. 【手写系列】纯手写实现JDK动态代理

    前言 在Java领域,动态代理应用非常广泛,特别是流行的Spring/MyBatis等框架.JDK本身是有实现动态代理技术的,不过要求被代理的类必须实现接口,不过cglib对这一不足进行了有效补充.本 ...

最新文章

  1. 安装部署及升级到Exchange Server 2010
  2. Linux下samba服务速度很慢的问题
  3. web 小程序 ch3 小程序框架
  4. 社交网站将推动手游发展
  5. UILabel自适应高、宽
  6. .NET6之MiniAPI(三十):结束篇(附链接)
  7. python代做在哪找靠谱_比较靠谱的资产评估师考试去哪找
  8. 高能预警!这些段子已刷爆大学老师朋友圈
  9. linux 串口中断_1600字干货 | 大佬讲Linux启动流程(内含福利)
  10. python turtle绘制七段数码管日期时间(注释)
  11. KL与JS散度学习[转载]
  12. 几个跨平台移动App开发方案框架比较
  13. BitMap算法和Java的实现类BigSet
  14. 服务器代理跳过上网限制策略
  15. 【华为云技术分享】深度理解AI概念、算法及如何进行AI项目开发
  16. 七周成为数据分析师 | 数据库
  17. cs,ds,ss,es?即cs,ds,ss,es的区别
  18. 纯前端,js导出页面为pdf
  19. 中国研修网计算机培训心得,网络研修心得体会范文
  20. 麒麟kylin3安装字体

热门文章

  1. 【转摘】PYTHON 正则表达式
  2. FPGA跨时钟域处理的三大方法
  3. C++中 gets()函数
  4. 算法导论——二叉查找树
  5. jittor和pytorch生成网络对比之wgan_gp
  6. 使用selenium设置firefox不加载图片增加加载速度提高爬虫效率
  7. 深耕大数据“试验田” 发掘新经济“钻石矿”
  8. [Eclipse] - Eclipse空格替换tab
  9. XML文档操作工具类
  10. 【转】IIC总线的FPGA实现