Fastclass机制:
为一个对象创建对应的Fastclass对象,对象的各个方法会创建索引index关联到fastclass对象,每个index对应一个方法,之后只需要通过对象实例以及index,调用invoke(instance,index,args),即可调用对应对象的方法。
CGLIB机制会生成三个子类:
-
目标类的Fastclass类
-
代理类,继承于目标类
-
代理类的fastclass
具体项目:
1.前端调用方法a,建立enhancer代理对象,设置目标类,设置代理类,enhancer.create,调用enhancer.createhelper,得到classname为代理类
2.走到intercept方法中,o为代理类,method为调用的方法。
3.执行intercept,执行methodProxy.invokeSuper(o,params),o为代理类对象,执行this.init(),此时fastclass为空,为initlock上锁,ci为methodproxy,其中包含执行的方法、CGliB方法,c1为目标方法,f1为目标类fastclass,c2为代理方法(CGLIB$a¥1()v),f2为代理类fastclass,i1是目标对象中的方法索引1,i2是代理对象中CGLIB¥a¥1()v的索引10,将methodproxy置为null,createinfo也为空
4.调用代理对象的invoke,参数为代理方法cglib索引,代理对象,形参,执行cglib方法,在cglib方法中有super.a();
5.最终执行目标类中的a()方法。