动态代理和静态代理有哪些不同?
2021-03-06
大家可能对代理IP有一些了解但不一定知道代理模式,代理模式它是一种设计模式,提供对目标对象另外的访问方式。那么代理模式有几种?代理模式的优缺点有哪些呢?一起跟IPIDEA去了解一些代理模式的基础知识。
一、代理模式有几种
1.动态代理
是在运行的时候,通过jvm中的反射进行动态创建对象,生成字节码对象(构造方法参数InvocationHandlerh类型),传入由我们实现InvocationHandler接口的对象,通过反射创建代理对象。然后当调用代理对象的任何方法都会调用h中的invoke(Objectproxy,Methodmethod,Object[]args)传入当前代理对象、当前调用的方法、方法参数值。
2.静态代理
代理类是程序员制作的.class文件。但是其中短处是,具有重复代码,灵活性不好,例如在执行接口A中所有方法之前加上日志逻辑,那么使用静态代理的话,在代理类中每个方法都得加,如果我想add*开头方法加上一种逻辑,select*开头方法加上另一种逻辑,那么就很难去实现和维护了,想解决以上困惑就要使用动态代理了。
二、代理模式的优缺点
1.目标对象是单一的。
静态代理的实现相对简单,只要代理对象包裹目标对象,就可以实现增强功能,但是静态代理只能服务一个目标对象,如果目标对象太多,就会产生很多代理类。
2.实现多个类。
静态代理通常只表示一个类,而动态代理在一个接口下表示多个实现类。
3.比较消耗系统性能
动态代理必须实现InvocationHandler接口,通过反射代理方法,比较消耗系统性能,但可以减少代理类的数量,使用更灵活。CGLIB实现动态代理,不需要代理类实现接口。
4.class文件
静态代理在编译时已经实现,编译完成后代理类是实际的class文件。动态代理是在运行时动态生成的,即编译完成后没有实际的class文件,而是在运行时动态生成类字节码,并加载到JVM中。
对于代理模式有几种?代理模式的优缺点有哪些?通过上文的了解,相信大家都有一定的了解了。在某些不能直接访问的情况下,代理IP可以在客户端和目标之间起到中介的作用。
声明:本文来自网络投稿,不代表IPIDEA立场,若存在侵权、安全合规问题,请及时联系IPIDEA进行删除。