Retrofit+RxJava原理浅析

Retrofit+RxJava原理浅析Retrofit:核心:返回一个对象newISharedListService()动态代理:代理所有的。动态生成一个类:一个你对应的.class文件的对象–>反射代理的是一个object。看不见的类:代理类拓展类的行为和静态的是一样的主要方法:invoke。所有对接口类型的方法的调用都会执行到invoke方法里面代理对象在内存中,而不在外存中。看不见的。所有对接口的调用都会去执行到代理类的invoke函数中。一旦访问到了invoke,就形成了一个功能的拦截获取到你所有.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

Retrofit: 核心:返回一个对象 new ISharedListService()
动态代理:代理所有的
动态生成一个类:一个你对应的.class文件的对象–>反射
代理的是一个object。
看不见的类:代理类
拓展类的行为和静态的是一样的
主要方法: invoke
所有对接口类型的方法的调用都会执行到invoke方法里面
代理对象在内存中,而不在外存中。看不见的。
所有对接口的调用都会去执行到代理类的invoke函数中。
一旦访问到了invoke,就形成了一个功能的拦截


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

获取到你所有的注解信息:request动态变化的内容–》动态建立url–》具体请求的request–》解决okhttp中的配置繁琐的问题

在这里插入图片描述

静态代理:代理的思想:间接

method就是retrofit使用时接口的所有信息 loadServiceMethod–>反射、解析 耗性能?缓存 如果method
已经保存到LinkedHashMap中,先从map里取,如果有就直接拿,没有在创建

返回值和网络请求返回的javaBean已经确定,把具体的网络工厂找出来

在这里插入图片描述

ServiceMethod.build来构建了一个具体的网络请求

对应着okhttp使用时的request

在这里插入图片描述

结合RxJava 的Observer,如果不用Rxjava那就返回的就是一个call对象

adapter

根据 returnType来找合适的adapter
returnType来自反射:

在这里插入图片描述

sharedListCall.enqueue–》onResponse、onFailure
返回的Response怎么解析
RxJava:嵌套,解决嵌套网络访问–》链式调度
Call slb = sharedListService.getSharedList(2,1);–>原生
RxJava:Observable coinRankList =iCoinRankService.getCoinRankList(1);
CallAdapter作用:Call—>java对象(上面两个)
适配 handler.post完成线程切换
Response在主线程执行
RxJavaCallAdapterFactory
两个设计模式:工厂设计模式 :抽象工场 适配器模式
先找工场,再找工场对应的适配器
CallAdapter—>nextCallAdapter:
adapterFactories.get(i).get(returnType,annotations,this)

三种不同适配类型,三种抽象工场

Retrofit和Okhttp对比

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234913.html原文链接:https://javaforall.net

(0)
上一篇 2025年5月24日 上午7:43
下一篇 2025年5月24日 上午8:15


相关推荐

  • 建立git服务器_git部署代码到服务器

    建立git服务器_git部署代码到服务器参考网上资料搭建git服务器过程记录如下:需求硬件需求:一台Ubuntu或者debian电脑(虚拟机),能通过网络访问到。软件需求:git-core,gitosis,openssh-server,openssh-client安装配置git服务器安装git和openssh:a@server:~$sudoapt-getinstallgit-coreopenssh-servero…

    2022年10月4日
    5
  • 决策树分类(decision tree classification)和python实现

    决策树分类(decision tree classification)和python实现决策树分类很符合人类分类时的思想 决策树分类时会提出很多不同的问题 判断样本的某个特征 然后综合所有的判断结果给出样本的类别 例如下图的流程即为一个典型的决策树分类的流程图 这个流程图用来简略的判断一个小学生是否学习很好 当然这里只是举个例子 现在的小学生可是厉害的不行了 这点评判标准完全不够看啊 说白了决策树就是 ifelse 的堆砌 是一个树形结构 我们在构建决策树分类器的时候主要关

    2026年3月19日
    2
  • 【离散数学】平面图

    【离散数学】平面图介绍图论中的平面图

    2022年5月26日
    39
  • IntelliJ IDEA Console 控制台输出中文乱码终极解决

    IntelliJ IDEA Console 控制台输出中文乱码终极解决IntelliJIDEA 控制台输出中文乱码 遇到这个问题的小伙伴想必都很脑壳痛 也应该搜到很多解决方法 如果按照其它方法能解决的话 就没必要再看这篇了 这里也不再例举普遍能搜到的方式 看这里 1 检查 pom xml 文件有没有这一句 没有的话把它加上 2 假如有改过 Tomcat 配置文件 apache tomcat 7 0 104 conf logging properties 内容为 GBK 的 把它改回 UTF 8 如果 Tomcat

    2026年3月27日
    3
  • Agent Teams:组建你的 AI 开发小队

    Agent Teams:组建你的 AI 开发小队

    2026年3月14日
    2
  • react echarts中国地图的实现

    react echarts中国地图的实现安装 echartsnpmin useEffect from react import asechartsfro echarts 全局引入 可按需引入 importchinaf utils china json import map css constMap gt varmyChart useEffect gt l

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号