进去
进入proxyClassCache.get方法
然后第120行时关键,我们看这个apply方法是BiFunction接口的方法,有如下实现类,把鼠标放到subKeyFactory上去发现是KeyFactory类型的,进debug去看,没有我们想要的
然后继续往下走,有个while循环,经过几次debug,发现这个循环是关键,具体看图中标注
我们需要进这个get
进来get之后发现有一行关键点,就是下图的230行,还是有个apply方法
刚才也说过了他有如下实现类
通过看valueFactory的类型知道他是ProxyClassFactory类型的,然后进入这个类。他是Proxy类的一个静态内部类。
经过多次debug发现639-643行是关键,其中第639行是获取字节码,然后第642行调用defineClass0(一个native方法)创建实例。
这里加个小插曲,为什么java的动态代理生成的代理类前面有个$Proxy呢,在这里可以得到答案。
回到刚才,字节码我们看不懂,但是可以反编译我们把639行拿出来写个测试类