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

一、什么是代理模式

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

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

二、动态代理模式

经典的动态代理模式分为两种: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、选择更稳定的代理

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

相关推荐
咖啡八杯41 分钟前
GoF设计模式——解释器模式
java·后端·spring·设计模式
优橙教育1 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
糖果店的幽灵1 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
腻害兔2 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
碎光拾影3 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Miao121314 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
腻害兔4 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:支付模块 yudao-module-pay,一个让产品经理都看懂的支付中台设计
java·前端·vue.js·产品经理·ai编程
凌云C5 小时前
5G 协议体系与交互流程
网络协议
CRMEB系统商城5 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源
keyipatience6 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu