Retrofit原理簡析

Retrofit使用動態代理來爲interface動態生成每個方法,方便接口定義和調用,和OKHttp緊密結合。可定製的有

1 Converter.Factory

用於生成參數轉換器Converter,Converter可以將參數轉換爲RequestBody,將ResponseBody轉換爲返回值。Retrofit內置了兩個Factory,一個是BuiltInConverter;另一個是GsonConverterFactory,使用Gson來將參數轉換爲RequestBody和將ResponseBody轉換爲方法的返回值

2 CallAdapter.Factory

適配底層的OKHttp的Call,做調用底層OKHttp的Call之前轉換參數生成RequestBody,執行後從ResponseBody中轉換獲取方法的返回值。

3 okhttp3.Call.Factory

用於生成OKHttp的Call,真正執行網絡操作

調用Retrofit.create後,生成一個動態代理Proxy.newProxyInstance,調用下面的代碼開始生成ServiceMethod方法,生成OKHttp的Call

ServiceMethod serviceMethod = loadServiceMethod(method);
OkHttpCall okHttpCall = new OkHttpCall<>(serviceMethod, args);
return serviceMethod.callAdapter.adapt(okHttpCall);

4 ServiceMethod

在調用指定的方法時,生成對應的,根據註解填充ServiceMethod對應的域,其中ParameterHandler是對某個參數來生成對應的Request相應的字段。

5 使用@Body Post單個字符串時帶有引號

Post時,用@Body來註解字符串,會給字符串兩側添加引號,這時Gson的行爲,序列化一個字符串時加上引號。此時可以用@FormUrlEncoded註解方法,@Field註解參數來生成form形式的RequestBody

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章