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

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