Java中的代理

正向代理

反向代理
  1. 隱藏服務(wù)器真實(shí)IP:使用反向代理叛本,可以對(duì)客戶(hù)端隱藏服務(wù)器的IP地址。
  2. 負(fù)載均衡:反向代理服務(wù)器可以做負(fù)載均衡攘已,根據(jù)所有真實(shí)服務(wù)器的負(fù)載情況炮赦,將客戶(hù)端請(qǐng)求分發(fā)到不同的真實(shí)服務(wù)器上。
  3. 提高訪問(wèn)速度:反向代理服務(wù)器可以對(duì)于靜態(tài)內(nèi)容及短時(shí)間內(nèi)有大量訪問(wèn)請(qǐng)求的動(dòng)態(tài)內(nèi)容提供緩存服務(wù)样勃,提高訪問(wèn)速度吠勘。
  4. 提供安全保障:反向代理服務(wù)器可以作為應(yīng)用層防火墻,為網(wǎng)站提供對(duì)基于Web的攻擊行為(例如DoS/DDoS)的防護(hù)峡眶,更容易排查惡意軟件等剧防。還可以為后端服務(wù)器統(tǒng)一提供加密和SSL加速(如SSL終端代理),提供HTTP訪問(wèn)認(rèn)證等辫樱。

代理模式(Proxy Pattern) :給某一個(gè)對(duì)象提供一個(gè)代理峭拘,并由代理對(duì)象控制對(duì)原目標(biāo)對(duì)象的引用。
在某些情況下狮暑,一個(gè)客戶(hù)不想或者不能直接引用一個(gè)對(duì)象鸡挠,此時(shí)可以通過(guò)一個(gè)稱(chēng)之為“代理”的第三者來(lái)實(shí)現(xiàn)間接引用。
代理對(duì)象可以在客戶(hù)端和目標(biāo)對(duì)象之間起到中介的作用搬男,并且可以通過(guò)代理對(duì)象去掉客戶(hù)不能看到的內(nèi)容和服務(wù)或者添加客戶(hù)需要的額外服務(wù)拣展。
所以,靜態(tài)代理和動(dòng)態(tài)代理的主要區(qū)別就是代理類(lèi)創(chuàng)建的時(shí)間不同缔逛。
靜態(tài)代理類(lèi):由程序員創(chuàng)建或由特定工具自動(dòng)生成源代碼备埃,再對(duì)其編譯。在程序運(yùn)行前褐奴,代理類(lèi)的.class文件就已經(jīng)存在了按脚。
動(dòng)態(tài)代理類(lèi):在程序運(yùn)行時(shí),運(yùn)用反射機(jī)制動(dòng)態(tài)創(chuàng)建而成敦冬。

靜態(tài)代理通常只代理一個(gè)類(lèi)辅搬,動(dòng)態(tài)代理是代理一個(gè)接口下的多個(gè)實(shí)現(xiàn)類(lèi)。靜態(tài)代理事先知道要代理的是什么脖旱,而動(dòng)態(tài)代理不知道要代理什么東西伞辛,只有在運(yùn)行時(shí)才知道烂翰。

使用靜態(tài)代理模式需要程序員手寫(xiě)很多代碼,這個(gè)過(guò)程是比較浪費(fèi)時(shí)間和精力的蚤氏。
一旦需要代理的類(lèi)中方法比較多甘耿,或者需要同時(shí)代理多個(gè)對(duì)象的時(shí)候,這無(wú)疑會(huì)增加很大的復(fù)雜度竿滨。

JDK動(dòng)態(tài)代理:java.lang.reflect 包中的Proxy類(lèi)和InvocationHandler接口提供了生成動(dòng)態(tài)代理類(lèi)的能力佳恬。
Cglib動(dòng)態(tài)代理:Cglib (Code Generation Library )是一個(gè)第三方代碼生成類(lèi)庫(kù),運(yùn)行時(shí)在內(nèi)存中動(dòng)態(tài)生成一個(gè)子類(lèi)對(duì)象從而實(shí)現(xiàn)對(duì)目標(biāo)對(duì)象功能的擴(kuò)展于游。

JDK的動(dòng)態(tài)代理有一個(gè)限制毁葱,就是使用動(dòng)態(tài)代理的對(duì)象必須實(shí)現(xiàn)一個(gè)或多個(gè)接口。如果想代理沒(méi)有實(shí)現(xiàn)接口的類(lèi)贰剥,就可以使用CGLIB實(shí)現(xiàn)倾剿。
使用JDK動(dòng)態(tài)代理的對(duì)象必須實(shí)現(xiàn)一個(gè)或多個(gè)接口
使用cglib代理的對(duì)象則無(wú)需實(shí)現(xiàn)接口,達(dá)到代理類(lèi)無(wú)侵入蚌成。

Cglib是一個(gè)強(qiáng)大的高性能的代碼生成包前痘,它可以在運(yùn)行期擴(kuò)展Java類(lèi)與實(shí)現(xiàn)Java接口。它廣泛的被許多AOP的框架使用担忧,例如Spring AOP和dynaop芹缔,為他們提供方法的interception(攔截)
Cglib包的底層是通過(guò)使用一個(gè)小而快的字節(jié)碼處理框架ASM瓶盛,來(lái)轉(zhuǎn)換字節(jié)碼并生成新的類(lèi)最欠。不鼓勵(lì)直接使用ASM,因?yàn)樗枰銓?duì)JVM內(nèi)部結(jié)構(gòu)包括class文件的格式和指令集都很熟悉惩猫。

哪里能看到AOP的身手芝硬?
Java的動(dòng)態(tài)代理的最主要的用途就是應(yīng)用在各種框架中。因?yàn)?strong>使用動(dòng)態(tài)代理可以很方便的運(yùn)行期生成代理類(lèi)轧房,通過(guò)代理類(lèi)可以做很多事情拌阴,比如AOP,比如過(guò)濾器锯厢、攔截器等皮官。
在我們平時(shí)使用的框架中脯倒,像servlet的filter实辑、包括spring提供的aop以及struts2的攔截器都使用了動(dòng)態(tài)代理功能。我們?nèi)粘藻丢?吹降膍ybatis分頁(yè)插件剪撬,以及日志攔截、事務(wù)攔截悠反、權(quán)限攔截這些幾乎全部由動(dòng)態(tài)代理的身影残黑。

鳴謝:所有和Java中代理有關(guān)的知識(shí)點(diǎn)都在這了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末馍佑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子梨水,更是在濱河造成了極大的恐慌拭荤,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疫诽,死亡現(xiàn)場(chǎng)離奇詭異舅世,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)奇徒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)雏亚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人摩钙,你說(shuō)我怎么就攤上這事罢低。” “怎么了胖笛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵网持,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我匀钧,道長(zhǎng)翎碑,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任之斯,我火速辦了婚禮日杈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘佑刷。我一直安慰自己莉擒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布瘫絮。 她就那樣靜靜地躺著涨冀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪麦萤。 梳的紋絲不亂的頭發(fā)上鹿鳖,一...
    開(kāi)封第一講書(shū)人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音壮莹,去河邊找鬼翅帜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛命满,可吹牛的內(nèi)容都是我干的涝滴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼歼疮!你這毒婦竟也來(lái)了杂抽?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤韩脏,失蹤者是張志新(化名)和其女友劉穎缩麸,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體赡矢,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡匙睹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了济竹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痕檬。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖送浊,靈堂內(nèi)的尸體忽然破棺而出梦谜,到底是詐尸還是另有隱情,我是刑警寧澤袭景,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布唁桩,位于F島的核電站,受9級(jí)特大地震影響耸棒,放射性物質(zhì)發(fā)生泄漏荒澡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一与殃、第九天 我趴在偏房一處隱蔽的房頂上張望单山。 院中可真熱鬧,春花似錦幅疼、人聲如沸米奸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)悴晰。三九已至,卻和暖如春逐工,著一層夾襖步出監(jiān)牢的瞬間铡溪,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工泪喊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棕硫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓窘俺,卻偏偏與公主長(zhǎng)得像饲帅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瘤泪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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

  • 本文動(dòng)態(tài)代理部分內(nèi)容大量引自:http://www.ibm.com/developerworks/cn/java/...
    端木軒閱讀 413評(píng)論 0 0
  • 摘要: 原創(chuàng)出處 http://peijie-sh.github.io 歡迎轉(zhuǎn)載灶泵,保留摘要,謝謝对途! 代理是Java...
    Joepis閱讀 542評(píng)論 0 4
  • 簡(jiǎn)介 代理是一種模式赦邻,提供了對(duì)目標(biāo)對(duì)象的間接訪問(wèn)方式,即通過(guò)代理訪問(wèn)目標(biāo)對(duì)象实檀。如此便于在目標(biāo)實(shí)現(xiàn)的基礎(chǔ)上增加額外的...
    多喝水JS閱讀 1,445評(píng)論 0 1
  • 今天在研究生報(bào)名確認(rèn)現(xiàn)場(chǎng)當(dāng)志愿者惶洲,看著比去年更多的報(bào)名人數(shù),在感慨競(jìng)爭(zhēng)壓力增大的同時(shí)膳犹,也慶幸連續(xù)兩年進(jìn)入復(fù)試后恬吕,終...
    平平仔閱讀 153評(píng)論 0 2
  • 一束亮光 書(shū) 規(guī)格(cm)130X35 組合售價(jià)2.8萬(wàn) (已售出買(mǎi)主收藏)
    一束亮光閱讀 3,149評(píng)論 1 5