说明:请结合其他文档和阅读源码来阅读
1.retrofit 是什么
准确来说,Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。 原因:网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网络请求接口的封装
- App应用程序通过 Retrofit 请求网络,实际上是使用 Retrofit 接口层封装请求参数、Header、Url 等信息,之后由 OkHttp 完成后续的请求操作。
- 在服务端返回数据之后,OkHttp 将原始的结果交给 Retrofit,Retrofit根据用 户的需求对结果进行解析。
优势
- 对网络请求参数的适配,协议,表单,Restful
- 封装OkHttp,Call
- 数据结果封装
2.retrofit 总流程
3.代理实例创建过程
retrofit = new Retrofit.Builder()
.baseUrl("")
.addConverterFactory(GsonConverterFactory.create(new Gson()))
.build();
IShareListService shareListService = retrofit.create(IShareListService.class);
1: 成功建立一个Retrofit对象的标准:配置好Retrofit类里的成员变量
- baseUrl:网络请求的url地址
- callFactory:网络请求工厂
- callbackExecutor:回调方法执行器
- adapterFactories:网络请求适配器工厂的集合
- converterFactories:数据转换器工厂的集合
2: 创建了一个ISharedListService 接口类的对象,create函数内部使用了动态代理来创建接口对象,这 样的设计可以让所有的访问请求都被代理
Call sharedListCall = sharedListService.getSharedList(2,1);
调用getSharedList的时候,在动态代理里面,会存在一个函数 getSharedList,这个函数里面会调用 invoke,这个invoke函数也就是retrofit里面 invoke函数。 所以,动态代理可以代理所有的接口,让所有的接口都走 invoke函数 ,这样就可以拦截 调用函数 的执行,从而将网络接口的参数配置归一化 。
4.访问接口创建过程
5.网络请求过程
converter response2 javaBean
6.Retrofit中的设计模式
- Retrofit 实例使用建造者模式 通过Builder类构建。 当构造函数的参数大于4个,且存在可选参 数的时候既可以使用 建造者设计模式
- Retrofit 创建时的callFactory,使用工厂方法 设计模式,但是似乎并不打算支持其他的工厂。
- 整个retrofit 采用的时外观模式 。统一的调用创建网络请求接口实例和网络请求参数配置的方法
- retrofit里面使用了动态代理 来创建网络请求接口实例,这个是retrofit对用户使用来说最大的复用, 其它的代码都是为了支撑这个动态代理给用户带来便捷性的
- 使用了策略模式 对serviceMethod对象进行网络请求参数配置,即通过解析网络请求接口方法的参 数、返回值和注解类型,从Retrofit对象中获取对应的网络的url地址、网络请求执行器、网络请求适 配器和数据转换器
- ExecuteCallBack 使用装饰者模式 来封装callbackExecutor,用于完成线程的切换
- ExecutorCallbackCall 使用静态代理(委托) 代理了Call进行网络请求,真正的网络请求由okhttpCall执 行,然而okHttpCall不是自己执行,它是okhttp 提供call给 外界(retrofit)使用的唯一门户,其实这个 地方就是门面模式
- ExecutorCallbackCall 的被初始化是在 ExecutorCallAdapterFactory里面通过适配器模式 被创建的。 CallAdapter采用了适配器模式 为创建访问Call接口提供服务。默认不添加Rxjava则使用默认的 ExecutorCallAdapterFactory 将okhttp3.call转变成为 retroift中的call,如果有Rxjava则将okhttp3.call转化为 abservable。