• 动态代理原理和设计模式详解


    bfd07ef984961e6a898e4e628d883726.jpeg

    一、什么是代理模式

    代理模式是一种设计模式,提供了对目标对象额外的访问方式,即可以通过代理访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的方式进行访问,扩展目标对象的功能。


    通俗的说,例如你想租房,房子就是你的目标访问对象,那在中间的信息差巨大的情况下,你想要精准找到合适的房子,那么你可以找到中介,中介就是你的代理对象,用户通过中介完成租房的一系列操作(看房、交押金、租房、清扫卫生)。

    二、动态代理模式

    经典的动态代理模式分为两种:JDK动态代理和CGLIB动态代理模式

    三、JDK动态代理实现方式

    使用JDK动态代理的五大步骤:
    1、通过实现InvocationHandler接口来自定义自己的InvocationHandler;
    2、通过Proxy.getProxyClass获得动态代理类;
    3、通过反射机制获得代理类的构造方法,方法签名为getConstructor(InvocationHandler.class);
    4、通过构造函数获得代理对象并将自定义的InvocationHandler实例对象传为参数传入;
    5、通过代理对象调用目标方法;


    JDK静态代理和JDK动态代理的区别:
    JDK静态代理与JDK动态代理之间有些许相似,比如说都要创建代理类,以及代理类都要实现接口等。
    不同之处: 在静态代理中我们需要对哪个接口和哪个被代理类创建代理类,所以我们在编译前就需要代理类实现与被代理类相同的接口,并且直接在实现的方法中调用被代理类相应的方法;但是动态代理则不同,我们不知道要针对哪个接口、哪个被代理类创建代理类,因为它是在运行时被创建的。

    四、CGLIB动态代理模式

    CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类
    1、首先实现一个MethodInterceptor,方法调用会被转发到该类的intercept方法。
    2、然后在需要使用的时候,通过CGLIB动态代理获取代理对象两者的区别:JDK代理要求被代理的类必须实现接口,有很强的局限性。而CGLIB动态代理则没有此类强制性要求。
    简单的说,CGLIB会让生成的代理类继承被代理类,并在代理类中对代理方法进行强化处理(前置处理、后置处理等)

    五、海外动态代理

    在了解底层的动态代理模式后,如何选择好用快速的动态代理:

    1、选择代理池子大的。

    代理池越大,代理ip数量越多,越能获得更多的信息

    2、选择高匿名度的

    越高的匿名度才越能保护我们的信息安全。ipfoxy动态代理超高匿名度,保证信息安全

    3、选择更稳定的代理

    稳定的代理才能保证业务的顺利进行,如果经常掉线或者数据无法上传/上传失败,会严重影响我们的数据安全以及业务的顺利进行


  • 相关阅读:
    基于springboot的高校科研管理系统(源码+调试+LW)
    实时数仓架构那些事儿
    一文带你了解 Google I/O 2022 精彩汇总与个人感想
    按键精灵调用大漠插件源码例子
    【云计算】云数据中心网络(七):负载均衡
    利用大模型&知识图谱技术,告别繁重文案,实现非结构化数据高效管理
    python-opencv边缘检测与人脸检测应用
    ESP32 入门笔记07: ESP-NOW (ESP32 for Arduino)
    OrCAD原理图关联Allegro PCB交互设计设置的方法
    上周热点回顾(8.15-8.21)
  • 原文地址:https://blog.csdn.net/yugekuajing/article/details/132909393