codeegginterviewgroup / CodeEggDailyInterview

码个蛋每日面试题
393 stars 55 forks source link

Retrofit中使用jdk动态代理实现,那jdk中动态代理的实现原理是? #161

Open kukyxs opened 4 years ago

MrZhangyg commented 4 years ago

jdk动态代理只能代理接口,类似于编写一个接口实现类,其构造方法接收InvocationHandler参数,InvocationHandler相当于回调接口,在这个类中的接口方法实现中执行InvocationHandler的invoke方法回调出去。 与直接编写代码不同的是,这个接口的实现类是由jvm在运行期间动态生成的。在加载一个类时,类的数据是由读取class文件到内存中而来,动态代理直接就在内存中生成一份class的数据。