CGLib原理解读
知道的事情
1、CGLib通过ASM动态操作指令生成了被代理类的子类;
2、重写了目标类中所有的非private、非final的方法;
3、每一个重写的方法都有相应的代理方法;如下
这里面的say方法中,methodInterceptor执行时,this代表重写的代理子类
4、动态生成的代理类中
5、所以在CallBack的intercept方法中,使用的是代理对象,执行的代理方法——实则是:super.f();
6、区别于JDK动态代理,CGlib代理的回调执行方法中,这里确实是代理类对象执行的自己方法(只不过自己的方法实现中完全挪用的super.f(***)而已),并非是被代理对象执行的被代理对象自己的方法(JDK动态代理如此)。
其中method参数,是代表被代理类的被代理方法。如A类中的say(String s)
实则最大区别就是,有无被代理对象,或者说是否一定需要被代理对象,callback回调执行是否需要被代理对象。