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

一、什么是代理模式

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

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

二、动态代理模式

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

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

相关推荐
阿乾之铭1 分钟前
Spring Framework的常用工具类
java
北巷!!5 分钟前
宇信科技JAVA笔试(2024-11-26日 全部AK)
java·开发语言·科技
ᝰꫝꪉꪯꫀ3616 分钟前
JavaWeb——SpringBoot原理
java·开发语言·后端·springboot
HaiFan.11 分钟前
Spring日志
java·spring boot
爬山算法12 分钟前
Tomcat(36)Tomcat的静态资源缓存
java·缓存·tomcat
TPBoreas14 分钟前
手搓一个不用中间件的分表策略
java
、十一、14 分钟前
Tomcat的工作模式是什么?
java·tomcat
sxy1993sxy201816 分钟前
HTTP请求失败调试过程 -20241126
网络·网络协议·http
killsime16 分钟前
JavaWeb开发 : tomcat+Servlet+JSP
java·servlet·tomcat·javaweb
刽子手发艺36 分钟前
云服务器部署springboot项目、云服务器配置JDK、Tomcat
java·后端·部署