android retrofit
Retrofit将 Http请求 抽象成 Java接口:采用 注解 描述网络请求参数 和配置网络请求参数
用 动态代理 动态 将该接口的注解“翻译”成一个 Http 请求,最后再执行 Http 请求
注:接口中的每个方法的参数都需要使用注解标注,否则会报错
ref
https://blog.****.net/carson_ho/article/details/73732115
流程
1)通过解析 网络请求接口的注解 配置 网络请求参数
2通过 动态代理 生成 网络请求对象
3 通过 网络请求适配器 将 网络请求对象 进行平台适配
平台包括:Android、Rxjava、Guava和java8
4 通过 网络请求执行器 发送网络请求
5 通过 数据转换器 解析服务器返回的数据
6 通过 回调执行器 切换线程(子线程 ->>主线程)
7 用户在主线程处理返回结果
步骤2 建造者模式
对Builder类分析完毕,总结:Builder设置了默认的
平台类型对象:Android
网络请求适配器工厂:CallAdapterFactory
CallAdapter用于对原始Call进行再次封装,如Call到Observable
数据转换器工厂: converterFactory
回调执行器:callbackExecutor
步骤3 baseUrl
步骤4 转换工厂
数据转换器工厂converterFactories里
步骤5
build 了,正式的
总结
Retrofit 使用建造者模式通过Builder类建立了一个Retrofit实例,具体创建细节是配置了:
平台类型对象(Platform - Android)
网络请求的url地址(baseUrl)
网络请求工厂(callFactory)
build好了,正式读读源码
Retrofit是通过外观模式 & 代理模式 使用create()方法创建网络请求接口的实例(同时,通过网络请求接口里设置的注解进行了网络请求参数的配置)
create 就是外观模式
通过这一外观方法就可以在内部调用各个方法创建网络请求接口的实例和配置网络请求参数
大大降低了系统的耦合度
动态代理模式来了
使用动态代理的好处:
当NetService对象调用getCall()接口中方法时会进行拦截,调用都会集中转发到 InvocationHandler#invoke (),可集中进行处理
获得网络请求接口实例上的所有注解
更方便封装ServiceMethod