美文网首页
代理模式

代理模式

作者: heiheiwanne | 来源:发表于2016-11-18 10:45 被阅读8次

    代理模式

    定义:给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象。
    代理模式UML图
    要理解代理模式很简单,其实生活当中就存在代理模式:
    火车票代售

    静态代理:代理类是在编译时就实现好的。也就是说 Java 编译完成后代理类是一个实际的 class 文件。
    动态代理:代理类是在运行时生成的。也就是说 Java 编译完之后并没有实际的 class 文件,而是在运行时动态生成的类字节码,并加载到JVM中。
    //========那动态代理就跟类加载器差不多,都是要生成字节码文件 动态代理是直接生成字节码文件

    根据类加载器与接口数组唯一生成一个代理类对象(其实就是实现了接口的类,只不过是代码动态生成的,照这样说也可以生成委托类的子类)

    动态代理public final。特点?
    Java 实现动态代理的缺点:因为 Java 的单继承特性(每个代理类都继承了 Proxy 类),只能针对接口创建代理类,不能针对类创建代理类。

    Java 动态代理的内部实现 自动生成的代理类的代码是
    public final class $Proxy1 extends Proxy implements Subject{
    private InvocationHandler h;
    private $Proxy1(){}
    public $Proxy1(InvocationHandler h){
    this.h = h;
    }
    public int request(int i){
    Method method = Subject.class.getMethod("request", new Class[]{int.class}); //创建method对象
    return (Integer)h.invoke(this, method, new Object[]{new Integer(i)}); //调用了invoke方法
    }
    }

    动态代理是动态new了一个实现类,作为了代理类的一个成员变量,通过通过调用接口的方法,回调了proxy.invoke(),再调用了实现类的方法

    最近学到相关的后端知识Spring的AOP知识,用的就是JDK的动态代理以及CGLiB(动态字节码增强技术)
    相关阅读: Spring AOP 深入剖析

    java的动态代理机制详解

    动态代理

    相关文章

      网友评论

          本文标题:代理模式

          本文链接:https://www.haomeiwen.com/subject/mofjpttx.html