美文网首页
Retrofit 源码分析(create 源码解析 二)

Retrofit 源码分析(create 源码解析 二)

作者: 愤怒的板蓝根 | 来源:发表于2018-09-16 09:38 被阅读0次

不废话 先上图

我们首先从它的属性开始看起  第一个是一个MAP集合  这个暂时留着后面看 后面是okhttp和HttpUrl 这个两个属性 不多说然后就是两个list集合   一个创建线程的接口 Okhttp dispatcher 这篇源码解析里面 解释过 接着继续往下翻

到了creat的这个方法 我们先简略的 可以看出 这是一个动态代理模式 我们接着一句一句的来看

首先我们进入到第一个代码里面 可以 发现是一个工具类 的方法 这个方法判断了  我们使用Retrofit 要创建的Service那个接口类 是否为接口 然后是否继承了其他接口  我们接着往下面看  首先是一个FLAG判断 具体是什么意思暂时不清楚 我们先进入其中的方法看下

这个方法首先是对平台做了一个判断 然后通过一个for循环不断反射获取到service类的方法

然后进行一个判断是否Java8支持的DefaultMethod 再接着进入加载Service这个方法里面

第一句就是从serviceMethodCache这个缓存MAP集合中获取service缓存 如果有数据 则返回数据 否则则NEW一个新的ServiceMethod的建造者方法  传入参数  最后加入缓存集合   我们可以进去看下ServiceMethod的建造者方法

这个构造函数可以看出 主要是获取传入方法里面的 注解等参数然后我们再进入builde这个方法里面去看下

从这两张图里面可以看出 获取service中的注解并进行了一系列的解析和转换操作 (POST GET啥的) 并且最后New了一个新的ServiceMethod类  好了 我们再回到前面的 create方法中  下面就是动态代理部分的代码了

(动态代理不了解的小伙伴 可以去简书里面搜一搜 很多) 首先依然是做了一个版本判断 然后在invoke方法中

第一个判断是否是一个来自Object的方法,如果是则遵循正常调用。  第二个判断是判断是否Java8支持的DefaultMethod(上面也写到过)这个方法我们就不看了  最后获得一个ServiceMethod的实例 (loadServiceMethod这个方法返回的是一个实例 前面分析了)传入okhttpCall中 并返回一个serviceMethods.adapter方法  我们再进去看下

这个 CallAdapter接口其实是用来创建一个抽象工厂类的接口 后面再说  这次的源码分析就到此为止

相关文章

网友评论

      本文标题:Retrofit 源码分析(create 源码解析 二)

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