Retrofit源码学习

本文详细介绍了Retrofit的源码学习,包括Create方法、ServiceMethod加载、OkHttpCall和CallAdapter的使用。通过动态代理,Retrofit创建ServiceMethod对象并缓存,使用Builder构建ServiceMethod,通过CallAdapter适配不同的返回类型,最终通过OkHttpCall执行网络请求并进行数据转换。
摘要由CSDN通过智能技术生成

前言

学习Retrofit的源码已经有一段时间了,最近又翻了一遍,然后总结了一下。它里面用到了很多个设计模式,有工厂模式、代理模式、适配器模式等。

Create方法

mRetorfit.create(Service.clss)

create方法的返回语句如下:

    return (T) Proxy.newProxyInstance(service.getClassLoader(), new Class<?>[] {
    service },
        new InvocationHandler() {
   
          private final Platform platform = Platform.get();

          @Override public Object invoke(Object proxy, Method method, Object[] args)
              throws Throwable {
   
            ......
            ServiceMethod<Object, Object> serviceMethod =
                (ServiceMethod<Object, Object>) loadServiceMethod(method);
            OkHttpCall<Object> okHttpCall = new OkHttpCall<>(serviceMethod, args);
            return serviceMethod.callAdapter.adapt(okHttpCall);
          }
        });

使用了动态代理,将每次要执行的Service方法做拦截,然后交给里面的三个语句去执行。

loadServiceMethod(method)

  ServiceMethod<?, ?> loadServiceMethod(Method method) {
   
  //从缓存中获取ServiceMethod对象
    ServiceMethod<?, ?> result = serviceMethodCache.get(method);
    if (result != null) return result;

    synchronized (serviceMethodCache
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值