前述

代理模式(Proxy)是一个重要的设计模式,提供了对目标对象另外的访问方式(即通过代理来访问对象)。

举例:我们可以理解为代理权,如各大药材公司生产的药品,一般不会是公司自己零散售出,在个体病人与生产商之间会有一个代理商,代理商负责与公司沟通批量购入,然后再零散出售给病人,因而病人想要访问生产商需先与代理商沟通。也可以考虑(NBA球星——经纪人——球队)三者的关系;

优势:
(1)可以在目标对象实现的基础上,增加额外的功能操作(扩展目标对象的功能);
(2)职责更加清楚,更加智能化;

代理模式的关键在于:代理对象和目标对象;
一般分为动态代理和静态代理。

静态代理

条件:代理对象需是实现与目标对象一样的的接口

优点:可以做到在不修改目标对象功能的前提下,对目标对象的功能进行扩展;

缺点:
(1)代理对象与目标对象接口一致,导致所实行的类过于繁多。
(2)一旦接口增加方法,目标对象和代理对象都需要实现与维护。

动态代理

(1)代理对象不需要实现接口
(2)包含JDK代理、CGLIB代理

  • JDK代理
    JDK中生成代理的API:
    proxy:被代理的类的实例
    method:调用被代理的类的方法
    args:该方法需要的参数
public Object getProxyInstance() {return Proxy.newProxyInstance(target.getClass().getClassLoader(),目标对象的类加载器target.getClass().getInterfaces(),目标对象的接口new InvocationHandler() {//事件处理器@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//执行目标对象的方法Object returnValue = method.invoke(proxy, args);return returnValue;}});}
}
//在main函数中调用该方法(getProxyInstance())
  • CGLIB代理
    Cglib是一个字节码增强库,该代理对象的实现是在字节码的层面上。
    实现步骤:
    (1)实现MethodInterceptor接口,重写intercept方法(拦截器)
    (2)写一个目标类的代理实现方法getInstance,设置Enhance工具类,设置父类回调函数,创建子类操作;
public class FactoryProxy implements MethodInterceptor {//维护一个目标对象private Object target;public FactoryProxy(Object target) {this.target = target;}//设置代理类public Object getInstance() {//设置工具类Enhancer enhancer = new Enhancer();//设置父类enhancer.setSuperclass(target.getClass());//回调函数enhancer.setCallback(this);//创建子类(代理类)return enhancer.create();}//拦截器@Overridepublic Object intercept(Object arg0, Method method, Object[] arg2, MethodProxy arg3) throws Throwable {//执行目标对象的方法Object returnValue = method.invoke(target, arg2);return returnValue;}
}

注意:
(1)目标对象的类不能为final
(2)目标方法如果为static、final,那么将不会执行拦截操作;

代理模式(JDK、CGLIB)相关推荐

  1. 设计模式之代理模式、动态代理模式、Cglib代理模式

    代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这里使用到编程中的 ...

  2. 代理模式(静态代理模式、动态代理模式、cgLib代理模式、拦截器)

    目录 一.什么是代理? 二.代理的好处 三.实现代理的步骤 四.静态代理 五.动态代理

  3. 设计模式:代理模式是什么,Spring AOP还和它有关系?

    接着学习设计模式系列,今天讲解的是代理模式. 定义 什么是代理模式? 代理模式,也叫委托模式,其定义是给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用.它包含了三个角色: Subject: ...

  4. 面试官 | 说一下什么是代理模式?

    看了这篇文章,你会对静态代理模式,JDK 动态代理模式和 CGLIB 动态代理模式有个很清晰的认识. 01.简介 什么是代理模式 代理模式也称为委托模式,属于结构型模式之一.在某些情况下,一个对象不适 ...

  5. 设计模式之-代理模式

    代理模式详解 特点: 1. 执行者. 被代理人 2. 对于被代理人来说, 这件事情是一定要做的, 但是我自己又不想做或者没有时间做, 找代理. 3. 需要获取到被代理的人个人资料. 4.关心过程 穷举 ...

  6. 《设计模式系列》- 代理模式

    有情怀,有干货,微信搜索[三太子敖丙]关注这个有一点点东西的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系列文 ...

  7. SpringAOP之代理模式

    SpringAOP之代理模式 SpringAOP之代理模式 一.代理模式 二.静态代理 三.JDK动态代理 四.CGLib动态代理 五.总结 SpringAOP之代理模式 SpringAOP指的是在s ...

  8. Spring/Boot/Cloud系列知识(2)——代理模式

    代理模式是23种设计模式中的一种,属于一种结构模式.用一句大白话解释这个设计模式:当外部调用者调用A来完成一件事情/一个动作时,并不直接调用A本身,而是调用一个代理者,并再由代理者负责调用真实的执行者 ...

  9. Spring/Boot/Cloud系列知识(2)— — 代理模式

    本文转自:https://blog.csdn.net/yinwenjie/article/details/77848285 代理模式是23种设计模式中的一种,属于一种结构模式.用一句大白话解释这个设计 ...

  10. 代理模式——静态代理,动态代理(JDK代理和CGLib代理)

    概述 由于某些原因需要给某对象提供一个代理以控制对该对象的访问. 这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介. Java中的代理按照代理类生成时机不同又分为 ...

最新文章

  1. Windows服务BAT命令-安装、卸载、启动、停止
  2. html网页缩小之后div框移动,css – DIV在浏览器中放大和缩小时移动
  3. Selenium应用代码(登录)
  4. 【渝粤题库】广东开放大学 劳动心理学 形成性考核
  5. 基于theano的keras安装
  6. Bootstrap按钮的外观
  7. Pentium 4处理器架构/微架构/流水线 (7) - NetBurst前端详解 - 分支预测
  8. 数据结构实验之图论七:驴友计划(最新版)
  9. php输出excel乱码,如何解决php导出excel乱码的问题
  10. XJOI 9864 金字塔
  11. 最新全志超清4K视频编解码芯片-V316处理器
  12. UESTC_树上战争 CDOJ 32
  13. html设计带图形的边框,css怎么设置图片的边框?
  14. 使用Hypothesis生成测试数据
  15. 如何快速启动wine安装的软件
  16. 2014年春季学期,每日计划总结,每日签到
  17. 软件工程课程学习小组项目——网上书店
  18. python3.4勾股定理代码_使用有序数组来解决勾股定理(Python)
  19. 菜鸟应用发布 全民跨入APP2.0时代
  20. 改变发型的软件叫什么?来试试这几个换发型软件

热门文章

  1. APP渗透测试-----APK反编译
  2. 主成分分析PCA的前世今生
  3. 使用OPCServer通过Modbus协议对汇川PLC进行工业数据采集
  4. 什么是分布式数据库?小学生都能看懂。
  5. html语言的单词,如何匹配一段html中的单词或者词组
  6. vue-quill-editor自定义字体大小和字体样式
  7. java高级反射(一),通过反射批量修改属性值set,get方法 Field,对属性值进行统一操作
  8. linux的screen工具下载,Linux终端下的强大工具 - screen
  9. 基于jsp+ssm的房源信息管理系统
  10. 怎么给Word文档加密、选用隐大师U盘