關(guān)于CGLIB動態(tài)代理踩到的坑

在最近的一次項目上線之后,遇到了大面積客戶,報告系統(tǒng)服務(wù)異常的情況.查看服務(wù)器的日志發(fā)現(xiàn)了空指針異常,發(fā)現(xiàn)是該類的所有注入的service都為null.但是無法在短時間快速的找到問題,并且修復,只能回滾本次上線代碼....

1669477154730.jpg

回滾之后,開始緊鑼密鼓的排查工作,一開始猜測是因為抽象類原因?qū)е伦⑷胧?雖然不太可能,因為之前都是正常運行的代碼),但是后來查閱資料發(fā)現(xiàn),spring在為bean注入屬性的時候,會將其父類的屬性也一并注入了,所以這里問題的產(chǎn)生和抽象類沒有關(guān)系.
因為實在沒有頭緒,只能開始排查本次上線的改動點,最后發(fā)現(xiàn)有一個點比較可疑,本次上線中增加了一個配置,在applicationContext.xml中增加了這樣一行配置.


1669477450638.jpg

當時這是為了解決注入失敗的問題而增加的配置(烏龍事件,注入類的時候,一個類不小心寫成了實現(xiàn)類,而非接口,導致jdk動態(tài)代理注入失敗),將動態(tài)代理強制改為了CGLIB.為了驗證猜想將配置去掉,發(fā)現(xiàn)注入成功,不再報錯(這里有個誤區(qū),一直以為是注入失敗的問題,導致排查問題走了很多彎路).問題已經(jīng)找到, 于是開始排查原因,排查過程不再贅述,這里直接說最后的原因.

CGLIB動態(tài)代理在創(chuàng)建代理的,會將靜態(tài)方法,final方法等排除在外.


1669477914583.jpg

這導致,cglib的代理根本不會去攔截final和靜態(tài)方法.在我們的項目中,調(diào)用的正是final方法


1669478036797.jpg

由于這個execute是final方法,所以cglib不會攔截.在spring中,cglib的代理最終執(zhí)行的方法,是通過被代理對象去執(zhí)行的(假設(shè)方法被攔截到的話),而被代理的對象中,這些注入的屬性都是有值的,所以執(zhí)行成功.而本例中,由于是final方法,不會被攔截,所以直接通過代理類對象本身去調(diào)用execute方法,而不是通過被代理對象去執(zhí)行,而問題就出在代理對象中的屬性是從來沒有被注入過的,所以出現(xiàn)了空指針的情況.問題到此已經(jīng)一清二楚.

僅作記錄!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末囤踩,一起剝皮案震驚了整個濱河市晓褪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌勤庐,老刑警劉巖示惊,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件米罚,死亡現(xiàn)場離奇詭異丈探,居然都是意外死亡,警方通過查閱死者的電腦和手機碗降,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門讼渊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人爪幻,你說我怎么就攤上這事∩υぃ” “怎么了霹期?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵历造,是天一觀的道長。 經(jīng)常有香客問我吭产,道長,這世上最難降的妖魔是什么橄霉? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任邑蒋,我火速辦了婚禮,結(jié)果婚禮上钱慢,老公的妹妹穿的比我還像新娘卿堂。我一直安慰自己束莫,他們只是感情好,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布策严。 她就那樣靜靜地躺著挟裂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪栗竖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天狐肢,我揣著相機與錄音沥曹,去河邊找鬼。 笑死僵腺,一個胖子當著我的面吹牛壶栋,可吹牛的內(nèi)容都是我干的辰如。 我是一名探鬼主播贵试,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼毙玻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了桑滩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤幌氮,失蹤者是張志新(化名)和其女友劉穎戳吝,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體听哭,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年败明,在試婚紗的時候發(fā)現(xiàn)自己被綠了太防。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妻顶。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡讳嘱,死狀恐怖酿愧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嬉挡,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布拔恰,位于F島的核電站基括,受9級特大地震影響颜懊,放射性物質(zhì)發(fā)生泄漏阱穗。R本人自食惡果不足惜使鹅,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一患朱、第九天 我趴在偏房一處隱蔽的房頂上張望鲁僚。 院中可真熱鬧裁厅,春花似錦、人聲如沸拓挥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蚁鳖,卻和暖如春赁炎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背徙垫。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留坞琴,地道東北人逗抑。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像邮府,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子忍啤,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容