拦截方法中最核心的三行代码:
1.通过loadServiceMeyhod去创建ServiceMethod对象。这个ServiceMethod对象其中包括了网络请求接口的方法以及前面配置好注解的一些属性等等。
2.根据创建好的ServiceMethod对象,创建一个实际的网络请求的对象OkHttpCall,用它来同步异步请求的调用。
3.会根据ServiceMethod中的成员变量callAdapter(网络请求的适配器),将网络请求进行不同平台的适配,也就是调用adapter这个方法。
首先看一下loadServiceMeyhod:
loadServiceMeyhod这个对象就是读取网络请求接口里的方法,并根据前面配置好的属性去配置ServiceMeyhod这个对象。
他会设置一个同步锁,设置一个同步锁就可以保证不同的线程去读取LinkedHashMap缓存的时候不会造成数据的不安全性。然后调用缓存当中的get方法,ServiceMeyhod这个类通过单例进行创建,也就是创建ServiceMeyhod这个对象之前,他会判断LinkedHashMap缓存当中是否有之前创建过的网络请求实例。如果没有缓存,他就设为空,调用Builder模式来创建一个ServiceMeyhod对象并进行缓存,就是调用他的put方法将他传入缓存当中。所以说,创建实例的缓存机制它的核心做法就是使用单例模式实现ServiceMeyhod的唯一性,然后这个ServiceMeyhod对象对应网络请求接口里的方法。
看一下ServiceMeyhod:
callFactory:就是会生成一个call请求的工厂,这个工厂就是生产OkHttp库里的call对象。
callAdapter:网络请求的适配器。我们从服务端请求出来的数据需要适配不同的平台,包括Android,Java8等等,这时候就通过callAdapter适配器适配到不同的平台。
baseUrl:网络请求的地址。
Converter:就是负责把服务器返回给数据转换成泛型为T这个类型。
httpMethod:网络请求Http中的方法。
relativeUrl:网络请求的相对地址。baseUrl+relativeUrl就是一个完整的URL地址。
headers:网络请求的Http请求头,是一个键值对的形式。
contentType:Http网络请求中body的类型。
74-76 三个标志位。
parameterHandler:方法参数的处理器。作用就是负责解析接口中定义的每一个方法的参数,然后会构造Http请求时设置参数的一个过程。
ServiceMeyhod就是包含了访问网络所有的基本信息。
看一下ServiceMeyhod的构造方法:
传入了网络请求设置好的参数,那么就完成了ServiceMeyhod对象的创建。
网友评论