当前位置: 首页 > 网络应用技术

JDK静态代理,动态代理和CGLIB动态代理

时间:2023-03-07 19:34:28 网络应用技术

  代理模式为某个对象提供了代理,并通过代理对象控制原始对象的引用。代理对象在客户端和目标对象之间扮演中间角色。

  优势

  缺点

  代理模式可以分为两种类型:静态代理和动态代理,并且动态代理分为两种类型的JDK动态代理和CGLIB代理。

  JDK静态代理代理的三种代理方法的比较与委托的类相同。在代理类中,需要简单地实现硬编码界面。很容易理解,代理类需要一个硬编码的接口。它可能导致在实际应用,废物存储空间和低效率中重复编码

  JDK动态代理代理类别与委员会类相同。代理类应实现InvocationHandler接口并重写调用方法。在Invoke方法中,可以增强和处理委托的方法,而无需硬编码接口。高码重用率只能由接口的底层批准。Class为非最终佣金方法创建两种方法,一种方法与委托方法相同。它将通过该方法中的Super调用委托方法;另一个是代理类的唯一方法。在代理方法中,它将确定是否存在实现MethodInterceptor接口的对象。如果存在存在,则将调用拦截方法在运行时在委托方法上执行代理,以增强操作或接口,并且委托类无需实现接口,不能支付到接口。类和代理底层的最终方法将保持在一个数组中,并且可以通过多个索引直接执行静态代理和动态代理的比较。

  CGLIB动态代理比JDK动态代理更快?

  JDK代理是在弹簧AOP还是CGLIB代理中使用的?

  静态代理与“代理模式结构”一章的结构图相结合,以解释静态代理的实现

  静态代理只能为一个班级服务。如果有很多类需要代理,则需要编写大量代理类,这很麻烦。

  JDK动态代理原理在JDK动态代理中,每个动态代理类都必须实现界面,并且每个动态代理类都与一个相关联。当我们通过代理对象调用方法,该方法的调用将调用以调用接口方法。该方法将确定代理对象,方法名称和参数的代理的哪种方法。有关详细信息,请参见下面的源代码注释。

  使用该步骤使用JDK动态代理的5个步骤如下

  Java类提供了一种封装上述步骤2至4的工作的方法(请参阅下面的分类源代码),因此可以简化步骤至3个步骤

  使用示例,下面给出了JDK动态代理的示例。

  JDK静态代理和JDK动态代理的比较

  不同之处

  在CGLIB动态代理原理CGLIB动态代理中,通过字节码技术(使用字节代码处理框架)为类创建类的子类,并使用截断子类中所有父方法的呼叫的方法,编织交叉剪切的逻辑。

  使用步骤使用CGLIB动态代理步骤如下

  必须注意的是

  例子

  在快速阶级机制CGLIB动态代理中,方法不是通过反射来完成的,但是拦截方法的调用是通过机制实现的。

  在该机制中,不使用委员会类的反射(或)方法,但是动态生成了新类(继承),并使用索引来调用委托类别方法的说明。类型)获取索引值,然后通过索引值调用相应的方法。

  以下是使用反射技术和快速阶级机制调用委托方法的示例。

  JDK动态代理和CGLIB动态代理的比较