Spring AOP源码分析--代理方式的选择 (5)

Spring AOP源码分析--代理方式的选择

进去

Spring AOP源码分析--代理方式的选择

进入proxyClassCache.get方法

Spring AOP源码分析--代理方式的选择

然后第120行时关键,我们看这个apply方法是BiFunction接口的方法,有如下实现类,把鼠标放到subKeyFactory上去发现是KeyFactory类型的,进debug去看,没有我们想要的

Spring AOP源码分析--代理方式的选择

然后继续往下走,有个while循环,经过几次debug,发现这个循环是关键,具体看图中标注

Spring AOP源码分析--代理方式的选择

我们需要进这个get

Spring AOP源码分析--代理方式的选择

进来get之后发现有一行关键点,就是下图的230行,还是有个apply方法

Spring AOP源码分析--代理方式的选择

刚才也说过了他有如下实现类

Spring AOP源码分析--代理方式的选择

通过看valueFactory的类型知道他是ProxyClassFactory类型的,然后进入这个类​。他是Proxy类的一个静态内部类​。

经过多次debug发现639-643行是关键,其中第639行是获取字节码,然后第642行调用defineClass0(一个native方法)​创建实例。​

Spring AOP源码分析--代理方式的选择

 

这里加个小插曲,为什么java的动态代理生成的代理类前面有个$Proxy呢,在这里可以得到答案。

 

Spring AOP源码分析--代理方式的选择

Spring AOP源码分析--代理方式的选择

Spring AOP源码分析--代理方式的选择

 

回到刚才,字节码我们看不懂,但是可以反编译我们把639行拿出来写个测试类

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsswww.html