springboot(6)

Fastclass机制:

为一个对象创建对应的Fastclass对象,对象的各个方法会创建索引index关联到fastclass对象,每个index对应一个方法,之后只需要通过对象实例以及index,调用invoke(instance,index,args),即可调用对应对象的方法。

springboot(6)_第1张图片

 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()方法。

你可能感兴趣的:(spring,boot)