自从开始看spring的源码以来,自己看的还能够,效率也挺高的,每隔两三天都有输出,可是最近这4/5天时间里,效率及其底下。面试
要总结一下,否则后续估计又要放弃。因此这篇随笔也是给本身打气,越是昏昏欲睡越是以为无能为力越是长进的时候,千万不能泄气,咬牙坚持就能冲出重围。spring
开始看spring的bean结构的时候,遇到两个lookup 和 override的属性解析,在bean加载过程当中,这两个属性牵扯到了cglib的处理,其实很好理解这里须要用cglib给类进行加强,来实现spring中lookup和override的属性实现。jvm
由于以前对jdk的proxy研究过,可是对cglib并无认真的查看,加之上次面试的时候有问到过cglib的问题,因此以为此次须要把这个东西弄清楚,并且后续的aop部分,cglib是重点,所以决定把cglib的部分好好搞清楚,再继续。ide
因此策略上,这个进展是正常的,不要泄气。对象
可是具体操做上,如今遇到的问题是,查看cglib的时候,先查看了最第一版本的源码,写了一篇博客,总结了下最初的版本,比较简单, 花了三个小时左右就弄明白了,代码也大概翻了下,输出了博客,确实是用继承的方式,实现了代码加强,添加了属性,实现一个factory的接口,建立新实例,同时实现原有类的接口方法,在加强过的方法中,调用前和调用后,有两个方法调用,就实现了代码加强下的cglib的核心。继承
因而前天15号,开始从新返回spring Bean部分代码的翻阅,虽然掌握了cglib的最第一版本的核心内容,可是cglib的旧版本跟cglib的新版本仍是有差异的,而spring的代码我看的是5.0的版本,显然用的是新版本的cglib的实现,因此考虑到这个,决定把新版本的cglib的原理一并掌握了输出,这样cglib的部分就基本研究透了。因而前天开始看cglib的新版本,可是这个过程当中,出现了问题。首先cglib的新版本,看起来比较费劲,代码生成器从bcell换成了asm,并且复杂度较之最先版本差别仍是不小的,加上开始没找对生成中间类的办法(最后知道是设置一个中间类生成地址的系统属性便可),前天开始看,看了一天无果,昨天又看,才在下午找到了这个属性,而且开始拿到生成的中间代码。接口
今天,上午看的时候,以为须要把jdk的proxy和cglib的代码加强作一个比对,因而开始看jdk的proxy,jdk的proxy看的时候发现对jvm的原有opp_klass的对象模型比较欠缺,因而以为要把这块儿也补上,因而又开始看这部分。源码
总之,如今梳理这篇博客,一是告诉本身,如今看的部分的意义,别忘了。二是告诉本身,只是遇到一个坎儿而已,不要灰心,其实jdk的proxy还有对象模型,以前都是看过的,只是以前就似懂非懂,才会形成如今的被动,因此此次更要弄明白弄清晰才行。博客