JDK动态代理
生成代理对象的时候会调用jdk自动生成的代理类的构造方法,将传入的InvocationHandler赋值给了Proxy的属性h。
当代理类调用方法时,就会去调用程序员自己写的invocationHandler的invoke方法的逻辑,即代码super.h.invoke方法的调用。
CGLIB动态代理
obj为生成的代理类,firstInstance根据传入的obj代理类去生成代理对象。
setThreadCallbacks方法将程序员写的callbacks放到代理类的对象ThreadLocal属性中。
ReflectUtils.newInstance方法就是在创建代理对象。
SET_THREAD_CALLBACKS_NAME为代理类中设置ThreadLocal属性的方法的名称。
在setCallbacksHelper方法中,根据methodName方法名称,反射调用method,最终实现调用上面图片中的方法,为属性赋值。因为该方法时static的,所以通过反射调用的时候,不需要传入对象。