美文网首页
Retrofit原理简析

Retrofit原理简析

作者: 浩仔_Boy | 来源:发表于2020-12-08 18:05 被阅读0次

自己学习总结,仅供自己参考,如有不对欢迎指正

官方文档:https://square.github.io/retrofit/
A type-safe HTTP client for Android and Java
Retrofit 是一个在编译期就会将类型错误检查出来的,用来做Http请求的客户端工具

1.Retrofit的核心是动态代理:

在源码中的体现:

public <T> T create(final Class<T> service) {
  Utils.validateServiceInterface(service);
  if (validateEagerly) {
    eagerlyValidateMethods(service);
  }
  return (T) Proxy.newProxyInstance(service.getClassLoader(), new Class<?>[] { service },
      new InvocationHandler() {
        private final Platform platform = Platform.get();
        private final Object[] emptyArgs = new Object[0];

        @Override public Object invoke(Object proxy, Method method, @Nullable Object[] args)
            throws Throwable {
          // If the method is a method from Object then defer to normal invocation.
          //如果调用的方法是Object本身就有的方法,就直接返回。
          if (method.getDeclaringClass() == Object.class) {
            return method.invoke(this, args);
          }
          //用来做跨平台兼容的,比如java8 Android24等
          if (platform.isDefaultMethod(method)) {
            return platform.invokeDefaultMethod(method, service, proxy, args);
          }
          return loadServiceMethod(method).invoke(args != null ? args : emptyArgs);
        }
      });
}

Proxy.newProxyInstance通过这个方法会在运行时,生成传进来service对应的类,类里面实现了service所有的方法。方法的实际调用都是通过反射的方式。

InvocationHandler中的invoke方法是主要的实现,他的三个参数

  • proxy具体代理对象,就是自己
  • method 具体的service的方法
  • args 方法对应的参数

loadServiceMethod方法带缓存的加载,如果有缓存获取缓存,如果没有创建一个新的SeviceMethod
SeviceMethod作用:就是解读service中的方法,比如参数、方法名、请求方式等等

invoke(args != null ? args : emptyArgs);主要做的工作:

  • 创建了一个OkHttpCall ,实际上每一个 OkHttpCall 都对应于一个请求,它主要完成最基础的网络请求
  • 通过CallAdapter将call进行对应转换,比如将一个call转换成RxJava中的Observable

2.CallAdapter

主要作用:对call进行包装转换,比如将一个call转换成RxJava中的Observable

3.Converter

主要作用:转换(解析)服务器返回的数据、接口方法的注解参数等,包括对接口的加密、编码格式的转换等。

相关文章

  • Retrofit原理简析

    自己学习总结,仅供自己参考,如有不对欢迎指正 官方文档:https://square.github.io/retr...

  • Retrofit原理简析

    记得很久以前,写过一篇文章,主要说的是Retrofit应用的:Retrofit2+RxJava2踩坑 今天我们来简...

  • 简析Retrofit的工作原理

    注:当前分析的Retorfit版本为2.6.2 Retrofit初始化 一般使用retrofit的时候都是下面这段...

  • shiro原理简析+基于springboot基础实践

    1、shiro原理简析 原理简析: 1、subject支持不通调用获取用户信息 2、SecurityManager...

  • 网络库Retrofit2原理简析

    之前我们分析过了Okhttp这个优秀的网络请求库,但是在实际的使用时,还是会觉得有很多的不方便,你会发现它跟Htt...

  • 十、Retrofit简析

    Retrofit注解分为三类 请求方法注解:GET、POST、PUT、DELETE、 HEAD、PATCH、OPT...

  • DNS & CDN & HTTPDNS 原理简析

    DNS & CDN & HTTPDNS 原理简析 背景:域名系统 DNS (Domain Name System ...

  • Flutter中PlatformView相关

    Flutter Platform View 使用及原理简析Flutter 58: 图解 Flutter 嵌入原生 ...

  • jQuery原理简析

    网上很多jQuery的分析文章,虽然很详细,但是对我这种小白,只想了解一下大概原理,而不想花太多时间研究细节,于是...

  • HashMap原理简析

    前言:该文像是一片全貌介绍,重点主要落在equals方法和hashCode方法,这篇浅谈Java中的hashcod...

网友评论

      本文标题:Retrofit原理简析

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