我们使用OkHttp + Retrofit来开发网络模块那真是得心应手,但是项目紧张的时候总是完成任务就完事了心里却一直好奇这么多注解到底底层是怎么实现的。
如果有不熟悉注解的小伙伴,现在带大家彻底搞懂注解是什么,Retrofit的注解底层是怎么实现的。有俩个部分需要大家熟悉:
1,annotation是什么 有什么作用 怎么使用 请参考下边这篇文章 http://www.akathink.com/2016/08/11/%E5%BD%BB%E5%BA%95%E6%90%9E%E6%87%82Java%E6%B3%A8%E8%A7%A3Annotation/
2,retrofit源码分析
我们从这样的一行熟悉的代码出发 重点是create()方法
api = RetrofitDelegate.getInstance().getRetrofit(provideHostUrl()).create(apiClass());
点击进去查看源码
很明显使用的代理的模式,一般我们的接口是不能被实例化的,但是retrofit就可以使用这个接口的实例 这事怎么做到的呢?我们看个例子
关键部分我们要分析的是注解 我们看最后几行代码 第一行代码是关键我们要分析的 2,3是okhttp的call对象转换为rx的Observable对象或者是默认的call对象这个我们不在此次讨论范围。
1,ServiceMethod serviceMethod = (ServiceMethod) loadServiceMethod(method);
2,OkHttpCall okHttpCall =new OkHttpCall<>(serviceMethod, args);
3,return serviceMethod.adapt(okHttpCall);
我们进入ServiceMethod类看一下
一句话总结中心思想就是:通过反射获取到annotation的所有信息和value的值然后拼接url最后做网络请求。
网友评论