retrofit是一个restful风格且高效的网络请求框架的封装。底层是okhttp实现的网络请求。该框架大量使用了设计模式对功能模块的解藕。
使用的设计模式: 创建retrofit实例,建造者模式; callfactory(网络请求工厂),adapterFactories(网络请求适配器工厂集合),converterFactories(数据转换器工厂集合)都使用了工厂模式; platform的获取运用了单例模式; retrofit本身使用了门面模式; create()方法通过访问代理对象间接访问目标对象票;(动态代理:目标对象动态生成的);
使用步骤: 1.构建retrofit对象(构建者模式,构建所有请求所需要的共同的参数,如请求地址,数据转换器); 2.创建网络请求接口实例,配置请求参数(注解方式,如请求方法,请求参数,请求路径,返回类型); 3.发送网络请求; 4.处理服务器返回的数据。
支持多平台,platform:Android,java,iOS。如果是Android,会创建一个handler用于线程切换(请求完成,从子线程切换到主线程)
retrofit.create()它把网络请求配置的接口转换成一个实现了该接口的对象。java 中有一个内置的动态代理机制,通过接口类会自动生成代理对象, 需要注意动态代理必须基于接口类,否则就没有意义了,里边核心的技术就是JDK动态代理;自动生成代理对象,所有接口中的方法都转发给了invocationhandler的invoke方法统一进行处理,省去了自己处理接口实现类、构建请求、参数编码、数据解析等步骤,只需要一个接口就可以优雅的解决这些问题。代理对象是在程序运行时产生的.class对象中,不是编译期。
一个servicemethod对应一个网络请求接口里的方法,loadservicemethod(method)负责加载servicemethod,单例模式创建。servicemethod可以理解为已经配置好的请求,它会先从缓存servicemethodcache中以方法名作为key查找,找到直接返回,找不到调用parseAnnotations()重新创建,创建完成后会放入缓存中,以备下次同样接口调用时复用。
@rentation 注解:定义注解的生命周期 runtime:运行时有效,常用于自动注入; class:在class文件有效,被虚拟机丢弃; source:源文件有效,被编译器丢弃。 @target 注解:使用目标。如类,方法,注解,成员变量等8种。
.............