retrofit源码解析(一)

529次阅读  |  发布于4年以前

retrofit是Square公司对OKHTTP封装的网络请求框架,完美支持rxjava,主要思想是使用java的动态代理和注解通过反射获取okhttp需要的参数,方便开发人员通过路由表的形式来管理访问链接,本人分三部分分别记录retrofit的实例化 ,网络请求 ,以及参数解析,本篇为retrofit的实例化流程:

retrofit的入口为Retrofit类,Retrofit使用builder模式来构建参数

retrofit builder 参数

platform是平台,retrofit可以支持android ,java8和ios,platform使用的单例模式实例化,通过Platform类 的findPlatform()来判断当前使用的平台

platform android

android palatform就是获取主线程池,并设置handler的回调,callFactory是OKHTTP,baseurl为链接,converterFactories为流转换器,gson转换器GsonConverterFactory就是放在这里面,

adapterFactories为适配器,rxjava的RxJavaCallAdapterFactory放在这个列表里,callbackExecutor为回调线程

builder build()

在builder build的时候,会获取平台的回调线程,android平台为主线程

通过builder初始化参数后,在build()中创建Retorfit实例,在需要请求网络的时候,通过create()调用,create()的参数为路由表类接口

retrofit 路由表

retrofit通过注解获取访问参数

注:Java代理模式相关资料

retrofit create

retrofit 通过调用create()反射method来调用okhttp访问网络,create中,通过java反射来获取servicemethod类的实例,并吧相关注解信息传递给servicemethod类

servicemethod builder

mothodAnnotations为method注解,parameterTypes为method返回类型的泛型,parameterAnnotationsArray为method参数注解

在servicemethod builder build()方法中,对路由表中的方法信息进行解析

servicemethod build

在build中,通过createCallAdapter()获取okhttp网络访问的adapter

servicemethod cerateCallAdapter()

在createCallAdapter中,获取方法返回类型以及method的注解,然后调用retrofit的calladapter获取calladapter,在callAdapter中,如果设置了RxJavaCallAdapterFactory,会返回RxJavaCallAdapterFactory的实例,否则会返回默认的ExecutorCallAdapterFactory

(注:retrofit配合rxjava会更简洁,所有以下会使用RxJavaCallAdapterFactory,而不是ExecutorCallAdapterFactory)

,在calladapterFactory中,开始访问网络,什么时候调用网络请求的呢?可以看retrofit的create()方法中

通过动态代理,获取到RxJavaCallAdapterFactory的实例,然后调用adapter 的adapt方法,开始通过okhttp发起网络访问

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8