• java:代理模式


    代理模式

    动态代理是一种在运行时生成代理对象的机制,通过代理对象可以在不修改原始对象的情况下,对其进行额外的操作和增强.

    被代理对象就是豌豆射手

    代理角色就是火炬树桩

    动态代理的使用场景

    AOP(Spring框架技术):

    动态代理可以在不修改原始代码的情况下,通过拦截方法的调用来添加额外的行为,如日志记录,性能监控,事务管理等.

    延迟加载(Hibernate框架技术):动态代理可以用于延迟加载对象,当真正需要使用对象时,代理对象才会去加载和初始化真实对象,从而提高性能

    简化数据库操作(MyBatis框架技术):通过动态代理,MyBatis可以自动生成实现了Mapper接口的代理类

    在底层的代码中动态代理比较常见.许多框架使用动态代理来实现各种功能,动态代理可以在不修改原始代码的情况下,通过生成代理类来拦截和处理方法调用,因此动态代理可以实现更加灵活和可扩展的功能.

    代理模式:

    静态代理

    代理类存在于程序运行之前,前提是需要有一个接口,代理类和被代理类都需要实现此接口,以便于让代理对象能够对被代理对象进行代理操作.

    存在一个抽象角色(接口)

    定义被代理角色实现接口

    定义代理角色实现接口,增强被代理角色的功能

    在代理角色中传入被代理角色对象,即可在代理角色的方法中增强被代理角色的方法

    调用+增强功能

    
    
    • 1
    动态代理(重点)
    不需要创建代理类

    而是通过JDK提供的Proxy类在程序运行时,运用反射机制动态创建而成,这就是所谓的动态代理.

    动态代理相关的API

    java.lang.reflect.Proxy类创建动态代理类对象

    Proxy.newProxyInstance()
    //静态方法用于创建代理对象
    //传入三个参数
    //1,类加载器 
    ClassLoader loader
    //2,要实现的接口列表 需要和被代理类接口一致
    Class[] interfaces
    //3,具体实现代理逻辑的接口
    InvocationHandler h
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    CLassLoader

    和被代理角色使用同一个类加载器

    类加载器:将字节码文件加载到内存的工具

    使用字节码文件.getClassLoader获取

    Class[] interfaces

    接口的字节码数组

    使用字节码文件.getInterfaces()获取

    InvocationHandler

    InvocationHandler接口控制代理对象的具体执行逻辑

    InvocationHandler的实现类对象

    需要重写invoke方法

    invoke方法:代理对象调用方法时,就会触发此方法执行(回调方法)

    需要在此方法中拦截并增强需要增强的功能(判断)

    在方法中使用方法实例的invoke方法调用方法,在前后做增强处理

    invoke()方法
    //处理代理对象方法的调用
    //接收三个参数
    //1,代理对象(Object),代理对象实例,没什么用
    //2,当前调用的方法(Method),被调用的方法实例
    //3,方法的参数(Object[]),代理对象调用方法时传入的参数列表
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    线性代数 | 分开写 |第二章 矩阵及其运算 | 3. 逆矩阵
    Redis(10)Geospatial 地理位置
    【网络奇遇记】那年我与计算机网络的初相识 —— 网络的体系结构
    python表白程序,无法拒绝
    hyperf的启动源码分析(二)——请求如何到达控制器
    JAVAWeb---- 数据库的简单了解
    C#界面里的winform ContextMenuStrip属性
    贪心算法和动态规划
    目标检测YOLO实战应用案例100讲-基于无人机的轻量化目标检测系统设计(续)
    GPT-4o:引领人工智能新时代的强大引擎
  • 原文地址:https://blog.csdn.net/qq_55630615/article/details/137933905