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 方法

    

转载于:https://www.cnblogs.com/diyigechengxu/p/11592586.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值