背景
前一章节,先系统的讲解了关于Retrofit
实现当中的主要技术动态代理,本篇详细结合动态代理在Retrofit
中的应用,扩展到结合RxJava
来使用
思路
要深入研究一款开源项目最好的入口就是它所暴露出来的外部使用接口,按照这个思路,所以需要大体先了解Retrofit
的基本使用,这里就不阐述这些基础的知识,可以查看以前的博客
项目分析
想要弄清楚 Retrofit 的细节,先来看一下 Retrofit 源码的组成:
一个 retrofit2.http 包,里面全部是定义 HTTP 请求的注解,比如 GET、POST、PUT、DELETE、Headers、Path、Query 等等
余下的 retrofit 2.0 包中十几个类和接口就是全部 retrofit 的代码了,代码真的很少,很简单,因为retrofit把网络请求这部分功能全部交给了 okHttp 了
初始对象
先上一段使用Retrofit开始前的初始代码
//手动创建一个OkHttpClient并设置超时时间缓存等设置
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(basePar.getConnectionTime(), TimeUnit.SECONDS);
/*创建retrofit对象*/
Retrofit retrofit = new Retrofit.Builder()
.client(builder.build())
.addConverterFactory(ScalarsConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(basePar.getBaseUrl())
.build();
这里的入口Builder()
方法进入源码
public static final class Builder {
private Platform platform;
private okhttp3.Call.Factory callFactory;
private HttpUrl baseUrl;
private List<Converter.Factory> converterFactories = new ArrayList<>();
private List<CallAdapter.Factory> adapterFactories = new ArrayList<>();
private Executor callbackExecutor;
private boolean validateEagerly;
Builder(Platform platform) {
this.platform = platform;
// Add the built-in