一. JDK动态代理:

  • 1.1 概述:代理的具体实现在创建对象的时候根据需要动态加入。

  • 1.2 动态代理和静态代理的区别:静态代理是直接创建代理类,在类中定义好具体的实现;动态代理创建对象的时候加。静态代理创建代理类,在类中定义代理内容,再创建对象。

  • 1.3 JDK动态代理:代理和被代理对象都实现了共同的接口,相当于兄弟关系。

    1.Javajdk提供了一种接口式的处理方式,想要产出代理对象,当前的目标对象必须要有一个接口,产生的代理对象并不是目标对象类型,是目标对象的接口类型,只是具有目标对象的功能,并且对功能进行了增强。
    2.继承式的代理,目标对象不一定需要接口,但目标对象一定要能够被继承,不能被final修饰。Cglib会自己创建一个虚拟的类继承目标对象类,并重写里面的方法。在重写的方法中调用了原始方法最终得到的是目标对象的子类对象。这个对象是目标对象的类型。

  • 1.4 JDK动态代理案例——租房

1)创建中介与房东的公共接口

package com.gh.dao;public interface ZuFang {Integer chuZu(Integer money);
}

2)实现接口方法

package com.gh.dao.impl;import com.gh.dao.ZuFang;public class FangDong implements ZuFang {public Integer chuZu(Integer money) {System.out.println("房东收到房租:"+money);return money;}
}

3)测试

    @Testpublic void testFang(){final FangDong target = new FangDong();ZuFang proxy = (ZuFang)Proxy.newProxyInstance(target.getClass().getClassLoader(),//代理目标的类加载器target.getClass().getInterfaces(),//代理目标的接口Snew InvocationHandler() {/*** @param proxy     代理对象,一般用不到* @param method    代理的方法* @param args      代理方法中接收到的参数们* @return 代理对象*/public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("中介发广告");System.out.println("中接带看房");System.out.println("中介签合同");System.out.println("中介收房租:" + args[0]);args[0] = (Integer) args[0] - 400;Object invoke = method.invoke(target, args);System.out.println("中介提供售后");return invoke;}});Integer integer = proxy.chuZu(2000);System.out.println(integer);}
  • 1.5 Cglib动态代理(基于继承;代理和被代理对象产生继承关系;需要导入cglib依赖)
    1)导入依赖
<dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.3.0</version>
</dependency>

2)创建继承方法类

package com.gh.proxyCglib;public class FangDong {public Integer chuZu(Integer money) {System.out.println("房东收到房租:"+money);return money;}
}

3)测试

    @Testpublic void testCglib01() {final FangDong target = new FangDong();FangDong proxy = (FangDong) Enhancer.create(target.getClass(), new MethodInterceptor() {/*** @param proxy     代理对象,一般不用* @param method    被代理方法* @param objects      方法中传入的参数* @param methodProxy   方法代理* @return* @throws Throwable*/public Object intercept(Object proxy, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {System.out.println("中介代看房");System.out.println("中介签合同");System.out.println("中介收房租:" + objects[0]);objects[0] = (Integer) objects[0] - 400;Object result = method.invoke(target, objects);System.out.println("中介售后服务");return result;}});Integer integer = proxy.chuZu(3000);System.out.println(integer);}

三.静态代理(房东中介案例)

  1. 接口
/*** 公共接口*  中介和房东都需完成的方法*/
public interface ZuFang {Integer chuZu(Integer money);
}
  1. 代理目标
public class FangDong implements ZuFang {@Overridepublic Integer chuZu(Integer money) {System.out.println("房东收房租==>" + money);return money;}
}
  1. 代理
public class ZhongJie implements ZuFang {FangDong fangDong = new FangDong();@Overridepublic Integer chuZu(Integer money) {System.out.println("发广告");System.out.println("带看房");System.out.println("签合同");fangDong.chuZu(money-400);System.out.println("中介收房租===》" + money);System.out.println("修电器...");return money;}
}
  1. 测试
    @Testpublic void testZu(){ZhongJie zhongJie = new ZhongJie();Integer zu = zhongJie.chuZu(3600);}

java代理模式租房案例相关推荐

  1. java代理模式实现

    java代理模式实现 @(代理模式)[静态代理,动态代理,InvocationHandler] java的代理模式 分为两种,静态代理和动态代理,学习下什么是代理和静态动态代理的作用. java代理模 ...

  2. Java代理模式汇编

    文章目录 Java 代理模式实现方式,主流如下五种方法 Notes 静态代理实现 实现步骤 Cat接口 委托类 Lion 代理类角色(FeederProxy) 静态代理类测试 动态代理类(基于接口实现 ...

  3. java代理模式_Java代理

    java代理模式 本文是我们名为" 高级Java "的学院课程的一部分. 本课程旨在帮助您最有效地使用Java. 它讨论了高级主题,包括对象创建,并发,序列化,反射等. 它将指导您 ...

  4. java代理模式(java代理模式和适配器模式)

    Java设计模式的中介者模式是怎样的? 如果对象之间的关系原本一目了然,中介对象的加入便是"画蛇添足". 来看下中介者模式的组成部分吧. 1) 抽象中介者(Mediator)角色: ...

  5. java代理模式总结

    Java代理模式根据代理类生成时间的不同,可以分为静态代理和动态代理,它如同中介机构,可以为目标类提供代理服务,以控制对对象的访问,目标类的任何方法在执行前都必须经过代理类,这样代理类就可以用来负责请 ...

  6. [Java] 代理模式 Proxy Mode

    [Java] 代理模式 Proxy Mode 文章目录 [Java] 代理模式 Proxy Mode 1. 代理思想 2.java.lang.reflect.Proxy类 2.1 利用反射创建prox ...

  7. 浅谈自己对Java代理模式的理解--即为什么要用怎么用

    首先,国际惯例,上Java代理模式的定义:  Java代理模式:对其他对象提供一种代理以控制对这个对象的访问.              定义很简单,就一句话,怎么去理解,不急,先听一个小故事: 故事 ...

  8. 阿里十年资深程序员吐血总结之Java代理模式

    阿里十年资深程序员吐血总结之Java代理模式 文章目录 阿里十年资深程序员吐血总结之Java代理模式 1.接口代理 2.类代理 3.动态代理都是通过反射实现的吗 4.jdk动态代理和cglib动态代理 ...

  9. java代理模式解析

    1.代理模式概述: 代理模式(Proxy Pattern):给某一个对象提供一个代理,并且由代理对象控制对原对象的引用.<设计模式的艺术> 使用场景: 客户端在使用一个功能时,不希望直接使 ...

  10. java代理模式-原来你是这样的代理

    这几天在看一些框架源码时看到了一个很奇妙的设计模式,有种熟悉个感觉,一时想不出是什么模式,后面经过了解才知道是动态代理,就这样带着好奇心学习了这个模式,更深入了解代理会发现不仅有静态和动态,还有很多其 ...

最新文章

  1. Laravel 5.5.* Bug一枚
  2. android 命令启动服务,adb 命令
  3. 2016年10月起微软更改了更新服务模型
  4. qpython3编辑器怎么用_Python快速入门系列:Pyqt5界面开发好帮手-Qss样式编辑器介绍...
  5. 前端学习(3227):回调形式的ref的调用次数
  6. JDK 环境变量配置
  7. centos6 yum源_Centos6安装Zabbix3.4.15注意事项
  8. java 图像边界识别_图像识别原理之如何识别图像边缘
  9. ASCII与unicode的转换
  10. Python正则表达式模式备忘表
  11. 使用 classList API
  12. python ipad 微信_用Python玩微信(非常详细)
  13. 计算机键盘上范的怎么点击,微信怎么用键盘最小化 电脑最小化键盘怎么按
  14. 2015年4月21日---开始写自己的专业博客啦
  15. android手机之-------64位操作系统 与 64位处理器
  16. android inflate,Android LayoutInflater inflate() 图示详解
  17. 瘦,是一种信仰。轻,是一种理想
  18. 加速度计和陀螺仪解析
  19. 《项目管理中国式漫画》读后感
  20. iOS 客户端基于 WebP 图片格式的流量优化(下)

热门文章

  1. 哔哩哔哩电脑网页版怎么下载视频
  2. 一文搞定卷积神经网络——从原理到应用
  3. 微信小游戏代码包侵权的一种解决方案
  4. GNU Operating System
  5. videojs播放rtmp视频流,解决TypeError: this.el_.vjs_getProperty is not a function错误
  6. uniapp map 点聚合
  7. a12处理器怎么样_苹果新一代iPhone A12仿生处理器怎么样
  8. 电感式dcdc原理(转)
  9. Can DBC文件翻译
  10. 超分辨重建-Bicubic双三次线性插值opencv实现