proxy.newinstance

先看看静态代理:

  功能接口

    interface ifunction {

      void dothing();

    }

  功能提供者

    class provider implement ifunction {

      public void dothing {}

    }

  功能代理者

    class proxy implement ifunction {

      private provider provid;

      public proxy(provider provid) {

        this.provid = provid;

      }

      public void dothing{

        provid.dothing();

      }

    }

前两者就是普通的接口和实现类,而第三个就是所谓的代理类。对于使用者而言,他会让代理类去完成某件任务,并不关心这件任务具体的跑腿者。

如果接口越多,每新增一个函数都要去修改这个 proxy 代理类:把委托类对象传进去,实现接口

 

动态代理

  

  功能代理者

    class proxy implement InvocationHandle {

      private Object obj;

      public Object bind(Object obj) {

        this.obj = obj;

      }

      public void invoke(Object proxy,Method method,Objects[] args) throws Throwable{

         return method.invoke(obj, args);

      }

    }

    provider provid = new provider()

    ifunc i = (ifunc) new proxy().bind(provid)

    i.dothing()

代理类和委托类 互相透明独立,逻辑没有任何耦合,在运行时才绑定在一起。

动态代理的核心思想是通过 Java Proxy 类,为传入进来的任意对象动态生成一个代理对象,这个realSubject代理对象默认实现了功能代理者的所有接口。内部实现了接口对应的所有方法,内部接口方法在调用时最终会调用到proxy的invoke函数中。super.h.invoke(this, m3, (Object[])null);

动态代理并不复杂,通过一个 Proxy 工具,为委托类的接口自动生成一个realProxy代理对象,后续的函数调用都通过这个代理对象进行发起,最终会执行到 InvocationHandler#invoke 方法

    

posted @ 2019-09-26 16:26  程石亮  阅读(432)  评论(0编辑  收藏  举报