cglib的坎

自從開始看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還有對象模型,以前都是看過的,只是以前就似懂非懂,纔會形成如今的被動,因此此次更要弄明白弄清晰才行。博客

相關文章
相關標籤/搜索