Retrofit通过我们调用create方法时传递的接口,通过Java内置的动态代理对象Proxy的newProxyInstance方法,为我们动态生成Proxy代理类实例,该实例是Proxy类型实例,Java的动态代理只能为接口创建代理类,不能为抽象类或其他类生成代理类,否则会报错。
Java8中interface也能定义deafault方法。
Retrofit.create()就是通过Java的动态代理将我们自定义实现的请求Interface的方法先转给了InvocationHandler的invoke(),再转嫁给loadServiceMethod实例的invoke(),该invoke方法生成了一个okhttpCall实例。
记一个能记笔记的笔记哦
接口的实现类是从哪里来的?
create方法中通过java内置的动态代理实现的。将接口中的所有方法转给了InvocationHandler的invoke方法,并返回一个loadServiceMethod(是一个ServiceMethod)方法。由它发起网络请求。