其他分享
首页 > 其他分享> > DesignMode_动态代理

DesignMode_动态代理

作者:互联网

代理类别

  1. 静态代理(继承/组合):在编译阶段就确定了Proxy类的代码
  2. 动态代理:在JVM运行过程中,动态的创建一个类的代理类,并实例化代理对象

动态代理实现

  1. JDK原理
    1. 通过JVM实现代理类字节码的创建,利用反射机制生成一个实现代理接口的匿名类,在调用业务方法前调用InvocationHandler.invoke()处理,内部利用反射调用被代理对象的方法
    2. JDK动态代理只能代理实现了接口的类,代理类必须实现InvocationHandler接口
    3. 思想:反射 + 组合
public final class $Proxy0 extends Proxy implements Subject{
      ...
      private static Method m0 = Class.forName("com.xtg.xm.designmode.proxy.jdk.Subject").getMethod("request", new Class[0]);
      //$Proxy0
      public final void request() {
        try {
            this.handler.invoke(this, m0, null);
      ...
  1. CGLIB原理
    1. 底层是通过ASM字节码框架生成类的字节码,生成一个实现MethodInterceptor接口的代理子类,通过方法拦截技术过滤对父类的方法调用
    2. 基于继承,目标类和目标方法不能被final修饰
    3. 思想:ASM + 继承

标签:调用,字节,代理,接口,DesignMode,动态,final
来源: https://www.cnblogs.com/xuanmingxi/p/14365856.html