JDK動態(tài)代理

1,靜態(tài)代理

1)靜態(tài)代理
image.png
image.png

2,動態(tài)代理

1)newProxyInstance生成代理類的實例
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
loader(類加載器): the class loader to define the proxy class
interfaces(代理類要實現(xiàn)的接口): the list of interfaces for the proxy class to implement
h(InvocationHandler): the invocation handler to dispatch method invocations to每一個proxy實例柬讨,都關(guān)聯(lián)一個InvocationHandler。
2)當(dāng)proxy調(diào)用一個方法,會dispatch到invocationHandler卷仑,handler會擁有一個proxied(target目標(biāo)對象)實例,底層使用反射調(diào)用proxied(target)的方法麸折。
public Object invoke(Object proxy, Method method, Object[] args)
3)創(chuàng)建Proxy對象锡凝。
java.lang.reflect.Proxy類,provides static methods for creating dynamic proxy classes and instances

image.png

image.png
image.png

Class<?> cl = getProxyClass0(loader, intfs);
subKeyFactory.apply(key, parameter)
生成的Class代理類垢啼,com.sun.proxy.$Proxy0
image.png

String proxyName = proxyPkg + proxyClassNamePrefix + num;
image.png

4)動態(tài)代理實例
m1 = Method 反射獲取doSomething方法
此處的doSomething()方法窜锯,就已經(jīng)不是原始的MyInterface里的doSomething()方法了,而是新生成的代理類的doSomething()方法芭析。
proxy.doSomething()底層锚扎,proxy.invocationHandler.invoke(this, m1, null),就是調(diào)用m1.invoke(realObject, null)

public static void consumer(MyInterface proxy){
  proxy.doSomething();
}
image.png

3馁启,代理類細(xì)節(jié)

1)Proxy代理類生成的對象驾孔。JDK的動態(tài)代理芍秆,生成的新代理類就是繼承了Proxy基類,實現(xiàn)了傳入的接口的類翠勉。
extends Proxy implements Myinterface妖啥。
2)Proxy類有一個成員變量InvocationHandler

image.png

生成代理類時,會初始化一個InvocationHandler
image.png

3)返回對象理解
InvocationHandler的invoke方法对碌,返回的Object是真實對象方法的返回結(jié)果:Object invoke(Object proxy, Method method, Object[] args) throws Throwable
Proxy的newProxyInstance方法荆虱,返回Object是代理類的實例:public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) throws IllegalArgumentException

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市朽们,隨后出現(xiàn)的幾起案子怀读,更是在濱河造成了極大的恐慌,老刑警劉巖骑脱,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菜枷,死亡現(xiàn)場離奇詭異,居然都是意外死亡叁丧,警方通過查閱死者的電腦和手機(jī)犁跪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來歹袁,“玉大人坷衍,你說我怎么就攤上這事√跆颍” “怎么了枫耳?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長孟抗。 經(jīng)常有香客問我迁杨,道長,這世上最難降的妖魔是什么凄硼? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任铅协,我火速辦了婚禮,結(jié)果婚禮上摊沉,老公的妹妹穿的比我還像新娘狐史。我一直安慰自己,他們只是感情好说墨,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布骏全。 她就那樣靜靜地躺著,像睡著了一般尼斧。 火紅的嫁衣襯著肌膚如雪姜贡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天棺棵,我揣著相機(jī)與錄音楼咳,去河邊找鬼熄捍。 笑死,一個胖子當(dāng)著我的面吹牛母怜,可吹牛的內(nèi)容都是我干的余耽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼糙申,長吁一口氣:“原來是場噩夢啊……” “哼宾添!你這毒婦竟也來了船惨?” 一聲冷哼從身側(cè)響起柜裸,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粱锐,沒想到半個月后疙挺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡怜浅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年铐然,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恶座。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡搀暑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出跨琳,到底是詐尸還是另有隱情自点,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布脉让,位于F島的核電站桂敛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏溅潜。R本人自食惡果不足惜术唬,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滚澜。 院中可真熱鬧粗仓,春花似錦、人聲如沸设捐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挡育。三九已至巴碗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間即寒,已是汗流浹背橡淆。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工召噩, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逸爵。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓具滴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親师倔。 傳聞我的和親對象是個殘疾皇子构韵,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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

  • 事例 小張是一個普普通通的碼農(nóng),每天勤勤懇懇地碼代碼趋艘。某天中午小張剛要去吃飯疲恢,一個電話打到了他的手機(jī)上〈呻剩“是XX公...
    余平的余_余平的平閱讀 493評論 0 0
  • Java代理和動態(tài)代理機(jī)制分析和應(yīng)用 概述 代理是一種常用的設(shè)計模式显拳,其目的就是為其他對象提供一個代理以控制對某個...
    丸_子閱讀 3,009評論 6 57
  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載 前言 Java 代理模式在 Android 中有很多的應(yīng)用搓萧。比...
    cc榮宣閱讀 813評論 0 7
  • 動機(jī) 學(xué)習(xí)動機(jī)來源于RxCache,在研究這個庫的源碼時杂数,被這個庫的設(shè)計思路吸引了,該庫的原理就是通過動態(tài)代理和D...
    卻把清梅嗅閱讀 367評論 0 1
  • 提到理財,很多人的第一反應(yīng)就是:學(xué)習(xí)理財投資當(dāng)然是為了賺錢啦反肋,除此之外還能有其他別的目標(biāo)嗎那伐? 賺錢當(dāng)然很重要,可是...
    叢叢xu閱讀 322評論 1 1