Retrofit源码
Retrofit
一种类型安全的http连接工具
对okhttp的封装,更易用,但伴随着功能的收窄
源码流程
retrofit.creat()
#Retrofit.java# public <T> T create(final Class<T> service) { validateServiceInterface(service);//检查接口与其中的方法是否合规 return (T) Proxy.newProxyInstance( //动态代理 service.getClassLoader(), new Class<?>[] {service}, new InvocationHandler() { private final Platform platform = Platform.get(); private final Object[] emptyArgs = new Object[0]; @Override public @Nullable Object invoke(Object proxy, Method method, @Nullable Object[] args) throws Throwable { // If the method is a method from Object then defer to normal invocation. if (method.getDeclaringClass() == Object.class) { return method.invoke(this, args);//检查方法是object中的方法,不作处理,直接运行 } args = args != null ? args : emptyArgs; return platform.isDefaultMethod(method) ? platform.invokeDefaultMethod(method, service, proxy, args)//检查方法是java8默认方法不作处理直接运行 : loadServiceMethod(method).invoke(args);//进入下一步 } }); }
动态代理:
动态:运行时创建
代理:对方法做统一处理
parseAnnotattions位于ServiceMethod.Java:解析方法的注解参数等
invoke位于ServiceMethod.Java:创建okhttpCall,做网络交互
responseConvert位于OkHttpCall:如果有addConvertFactory(),会对response’Body进行指定的转换,比如转成json
返回的call通过callAdapter转化把返回结果转为指定格式,rxJava或抛到主线程
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 炎武的学习笔记!