Retrofit - 6 动态代理模式

无侵入 扩展代码。通俗来讲,就是可以做代码增强,让你在不修改原来代码基础上,增强一些方法或功能。

动态代理:代理类在程序运行时创建的代理方式。

相比于静态代理:动态代理很大的优势在于,它能很方便的对我们代理的函数进行统一的处理,而不用去频繁的修改每一个代理类的函数。

两种动态代理的写法:

1 jdk动态代理
需要自己客户端来写辅助接口进行操作的。
由JAVA内部的反射机制来实现的,所以说动态代理反射机制在生成类的过程中比较高效。
public interface Subject {    // 代理类和被代理类都要执行的一个操作。
   void shopping();
}

public class Man implements Subject {  // 被代理类
   @Override
   public void shopping() {
      System.out.println(“Mjj 要去买东西…”);
   }

}


以上这个类是 代理类。

public interface InvocationHandler {
   Object invoke(Object var1, Method var2, Object[] var3) throws Throwable;
}

动态代理都必须要实现的这个接口,可以把这个InvocationHandler理解成代理对象,调用程序的时候,所一定要实现的这个接口。

invoke(Object proxy, Method method, Object[] args)
第一个参数:所代理的真实对象,可以理解成我们真实对象的一个代理。
第二个参数:我们调用真实对象的某个方法,它的一个Method对象。

第三个参数:我们所代理真实对象的某个方法的所有参数。

InvocationHandler
1) 每个代理类的对象都会关联一个表示内部处理逻辑的InvocationHandler接口的实现。
2) invoke方法的参数中可以获取参数。

3) invoke方法的返回值被返回给使用者。




2 CGLIB  可以直接修改字节码。

【总结】
运行期:
动态代理是通过我们代理类与相关机构不直接发生联系的情况下,而在运行时实现我们的动态关联。
invocationHandler接口和Proxy类:
动态代理与静态代理最大的不同:动态代理的代理类是不需要我们手动生成的,而该代理类是在我们运行时动态生成的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值