retrofit使用简介:

  • 在retrofit中通过一个接口作为Http请求的api接口。

    注意:@GET("url")中的url只是一个路径,不包含主机号的。
  • 创建一个retrofit实例。
  • 调用api接口。

retrofit源码剖析:

首先通过Builder模式来创建Retrofit对象,如下:

接着就是将咱们定义的接口转换成实例进行请求,究境它是怎么转换的呢,点击进去查看一下create()方法:

其中会回调invoke()方法,接着最核心的三行代码就出现了:

查看一下loadServiceMethod的具体实现:


再回到主流程来:

这个分析流程跟createCallAdapter()方法类似,就不分析了,回到解析我们api的方法上来:

而看一下adapt()的具体实现:

呃,空的,那肯定在它的子类,其实是在ExecutorCallAdapterFactory类中,然后它里面有个同步也有个异步请求,咱们看下异步请求的细节:

所以最终还是会调用到OkhttpCall的enqueue()方法:

所以~~其实都可以看到retrofit底层实现就是靠okhttp来实现的。

最后对动态代理这块进行总结一下:

  • 首先,通过Method把它转换成ServiceMethod;
  • 然后,通过serviceMethod,args获取到okHttpCall对象;
  • 最后,再把okHttpCall进一步封装并返回Call对象;

最新文章

  1. Atiti.大企业病与小企业病 大公司病与小公司病
  2. Log4j2 - 配置
  3. mongodb权限管理
  4. LintCode Find Minimum In Rotated Sorted Array
  5. TP数据访问
  6. dictEntry **table;
  7. java 解决JFrame不能设置背景色的问题 分类: Java Game 2014-08-15 09:48 119人阅读 评论(0) 收藏
  8. 最简便的清空memcache的方法
  9. html中a标签中的onclick和href的使用
  10. virtual box Failed to load unit ""pgm" 的error
  11. Android_神奇的android:clipChildren属性
  12. 201521123064 《Java程序设计》第7周学习总结
  13. c++之sizeof的用法
  14. mysql 案例 ~超时时间设置
  15. 14-01 Java matches类,Pattern类,matcher类
  16. windows下基于IIS配置ssl证书
  17. 树莓派 3b 串口启用
  18. Python高级--闭包与装饰器
  19. Spring+Ehcache
  20. Elasticsearch Groovy任意命令执行漏洞EXP

热门文章

  1. SQL易错锦集
  2. nginx负载均衡高可用部署和代理配置
  3. [bzoj4026]dC Loves Number Theory_主席树_质因数分解_欧拉函数
  4. rtsp学习参考资料1
  5. svn服务器端的更新操作
  6. Centos7 安装Jenkins (rpm 方式)
  7. [转帖] ./demoCA/newcerts: No such file or directory openssl 生成证书时问题的解决.
  8. 脚本(bat、shell)调用conda
  9. Servlet 过滤器和异常处理
  10. 「java.util.concurrent并发包」之 CyclicBarrier