JDK動(dòng)態(tài)代理的實(shí)現(xiàn)-簡述

JDK的Proxy實(shí)際上是提供了一個(gè)緩存機(jī)制緩存對(duì)應(yīng)ClassLoader產(chǎn)生的所有代理類

尋找緩存的時(shí)候通過ClassLoader以及傳入的Interface定位到具體產(chǎn)生的代理類
其實(shí)就是兩個(gè)Map摆舟,從Map<ClassLoader,Map<Interfaces,Class>>的映射.
但是實(shí)際上他是Map<CacheKey,Map<KeyX,Supplier>>的映射


在緩存中尋找代理類過程

  • 通過ClassLoader生成一個(gè)Cachekey(他是一個(gè)WeakRef,應(yīng)該是避免妨礙生成的代理對(duì)象的GC。)
  • 通過CacheKey找到第二個(gè)映射表Map<Interfaces,Class>
  • 通過KeyFactory根據(jù)interfaces的長度生成第二個(gè)映射表的Key,他也是WeakRef
  • 獲取最終Class對(duì)象的工廠爽室,通過工廠去創(chuàng)建獲取緩存的對(duì)象
  • 使用工廠創(chuàng)建動(dòng)態(tài)代理會(huì)將傳入的接口做一些校驗(yàn)以及篩選,然后傳進(jìn)C++層里浓若,應(yīng)該是做一些字節(jié)碼的操作然后生成一個(gè)class進(jìn)行l(wèi)oadClass斧蜕,這個(gè)class implement了我們傳入的接口双霍,因此可以代理類可以代理接口

這個(gè)動(dòng)態(tài)代理搞得跟動(dòng)態(tài)語言那樣好像類型變來變?nèi)サ摹!H髡ⅲ窗胩觳耪业将@取Class的緩存的操作
Supplier<V> supplier = valuesMap.get(subKey);
WeakCache中的valuesMaps是第二級(jí)映射
這個(gè)操作獲取的結(jié)果有兩種可能染坯,第一種是Factory 他 implement 了 Supplier提供了get接口
如果之前獲取過Factory,他會(huì)將Factory replace成 CacheValue存放Factory生成的動(dòng)態(tài)代理類
而CacheValue也繼承了Suppiler還繼承了WeakRef丘逸,也有g(shù)et方法单鹿。
所以外面在第二次get的時(shí)候就拿到緩存的value

 CacheValue<V> cacheValue = new CacheValue<>(value);
            // try replacing us with CacheValue (this should always succeed)
            if (valuesMap.replace(subKey, this, cacheValue)) {
                // put also in reverseMap
                reverseMap.put(cacheValue, Boolean.TRUE);
            } else {
                throw new AssertionError("Should not reach here");
            }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市深纲,隨后出現(xiàn)的幾起案子仲锄,更是在濱河造成了極大的恐慌,老刑警劉巖湃鹊,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件儒喊,死亡現(xiàn)場離奇詭異,居然都是意外死亡币呵,警方通過查閱死者的電腦和手機(jī)怀愧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來余赢,“玉大人芯义,你說我怎么就攤上這事∶挥樱” “怎么了毕贼?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蛤奢。 經(jīng)常有香客問我,道長陶贼,這世上最難降的妖魔是什么啤贩? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮拜秧,結(jié)果婚禮上痹屹,老公的妹妹穿的比我還像新娘。我一直安慰自己枉氮,他們只是感情好志衍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著聊替,像睡著了一般楼肪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惹悄,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天春叫,我揣著相機(jī)與錄音,去河邊找鬼。 笑死暂殖,一個(gè)胖子當(dāng)著我的面吹牛价匠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呛每,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼踩窖,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了晨横?” 一聲冷哼從身側(cè)響起洋腮,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颓遏,沒想到半個(gè)月后徐矩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叁幢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年滤灯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片曼玩。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鳞骤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出黍判,到底是詐尸還是另有隱情豫尽,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布顷帖,位于F島的核電站美旧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏贬墩。R本人自食惡果不足惜榴嗅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望陶舞。 院中可真熱鬧嗽测,春花似錦、人聲如沸肿孵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽停做。三九已至晤愧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間雅宾,已是汗流浹背养涮。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工葵硕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贯吓。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓懈凹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親悄谐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子介评,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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

  • 一、基本概念 1.什么是代理爬舰? 在闡述JDK動(dòng)態(tài)代理之前们陆,我們很有必要先來弄明白代理的概念。代理這個(gè)詞本身并不是計(jì)...
    小李彈花閱讀 16,433評(píng)論 2 40
  • 回顧: 上一篇代理之JDK動(dòng)態(tài)代理我們了解來JDK動(dòng)態(tài)代理的使用情屹。同樣也遺留了兩個(gè)問題:1坪仇、代理對(duì)象是怎么生成的?...
    Seetheworl_6675閱讀 278評(píng)論 1 1
  • 0.前言 在好多框架源碼中接觸過動(dòng)態(tài)代理垃你,也發(fā)現(xiàn)動(dòng)態(tài)有好多種不同的實(shí)現(xiàn)椅文,但就是這么常見的特性我居然沒有深入解析過,...
    海濤_meteor閱讀 513評(píng)論 0 0
  • 1.背景 上一節(jié)大致介紹了Proxy動(dòng)態(tài)代理的原理惜颇,從幾個(gè)疑問上面分析皆刺,這一節(jié)介紹一下動(dòng)態(tài)代理的緩存機(jī)制。網(wǎng)上的資...
    赤子心_d709閱讀 2,983評(píng)論 2 7
  • 昨天下午在愛丁堡城堡上俯瞰王子大街凌摄,看著看著有個(gè)戴圣誕帽的小孩走到我前面站著羡蛾。目力所及范圍內(nèi)是他頭上的圣誕紅與整個(gè)...
    楚原啊閱讀 19,383評(píng)論 0 1