Java設計模式--代理模式
1、代碼設計的代理模式
代理模式屬于構建型模式(Proxy),提供了對目標對象的一種訪問方式; 即通過代理對象訪問目標對象。這樣做的好處是:可以在目標對象實現(xiàn)的基礎上,增強額外的功能操作,即擴展目標對象的功能.這里使用到編程中的一個思想:不要隨意去修改別人已經(jīng)寫好的代碼或者方法,如果需改修改,可以通過代理的方式來擴展該方法。
主要思想: 由被代理對象(業(yè)務類)和代理類組成,代理類通常包括日志代理類、權限代理類。
動態(tài)代理和靜態(tài)代理的區(qū)別:
1、靜態(tài)代理在代理前就知道要代理的是哪個對象,而動態(tài)代理是運行時才知道;
2、靜態(tài)代理一般只能代理一個類,而動態(tài)代理能代理實現(xiàn)了接口的多個類;
JDK與Cglib動態(tài)代理對比:
1、JDK動態(tài)代理只能代理實現(xiàn)了接口的類,沒有實現(xiàn)接口的類不能實現(xiàn)JDK的動態(tài)代理;
2、Cglib動態(tài)代理是針對類實現(xiàn)代理的,運行時動態(tài)生成被代理類的子類攔截父類方法調(diào)用,因此不能代理聲明為final類型的類和方法;
動態(tài)代理主要應用場景:Spring AOP面向切面底層 ——Spring如何選擇兩種代理模式
1、如果目標對象實現(xiàn)了接口,則默認采用JDK動態(tài)代理;
2、如果目標對象沒有實現(xiàn)接口,則使用Cglib代理;
3、如果目標對象實現(xiàn)了接口,但強制使用了Cglib,則使用Cglib進行代理
2、計算機網(wǎng)絡中的正向代理和反向代理

正向代理: 需要你主動設置代理服務器ip或者域名進行訪問,由設置的服務器ip或者域名去獲取訪問內(nèi)容并返回;
具體:正向代理 是一個位于客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內(nèi)容,客戶端向代理發(fā)送一個請求并指定目標(原始服務器),然后代理向原始服務器轉交請求并將獲得的內(nèi)容返回給客戶端。客戶端必須要進行一些特別的設置才能使用正向代理。
正向代理的用途:
?。?)訪問原來無法訪問的資源,如google
(2) 可以做緩存,加速訪問資源
?。?)對客戶端訪問授權,上網(wǎng)進行認證
?。?)代理可以記錄用戶訪問記錄(上網(wǎng)行為管理),對外隱藏用戶信息
反向代理: 不需要你做任何設置,直接訪問服務器真實ip或者域名,但是服務器內(nèi)部會自動根據(jù)訪問內(nèi)容進行跳轉及內(nèi)容返回,你不知道它最終訪問的是哪些機器。反向代理(Reverse Proxy)實際運行方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發(fā)給內(nèi)部網(wǎng)絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現(xiàn)為一個服務器。
反向代理的作用:
(1)保證內(nèi)網(wǎng)的安全,可以使用反向代理提供WAF功能,阻止web攻擊。大型網(wǎng)站,通常將反向代理作為公網(wǎng)訪問地址,Web服務器是內(nèi)網(wǎng)。

(2)負載均衡,通過反向代理服務器來優(yōu)化網(wǎng)站的負載
nginx反向代理
nginx支持配置反向代理,通過反向代理實現(xiàn)網(wǎng)站的負載均衡。拿出一個nginx服務器做反向代理,其他nginx依然是服務器。nginx反向代理可以解決跨域的問題!
正向代理是代理客戶端,為客戶端收發(fā)請求,使真實客戶端對服務器不可見
反向代理是代理服務器端,為服務器收發(fā)請求,使真實服務器對客戶端不可見
總結
本篇文章就到這里了,希望可以給你帶來一些幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!
相關文章
elasticsearch索引創(chuàng)建create?index集群matedata更新
這篇文章主要介紹了elasticsearch索引創(chuàng)建create?index及集群matedata更新,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04
Java使用組合模式實現(xiàn)表示公司組織結構功能示例
這篇文章主要介紹了Java使用組合模式實現(xiàn)表示公司組織結構功能,簡單描述了組合模式的概念、功能并結合實例形式分析了Java使用組合模式實現(xiàn)公司組織結構表示功能具體操作步驟與相關注意事項,需要的朋友可以參考下2018-05-05
SpringBoot整合SpringSecurityOauth2實現(xiàn)鑒權動態(tài)權限問題
這篇文章主要介紹了SpringBoot整合SpringSecurityOauth2實現(xiàn)鑒權-動態(tài)權限,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06
使用Java計算集合中的組內(nèi)平均值的代碼實現(xiàn)
在Java開發(fā)中,集合(Collection)是一個重要的數(shù)據(jù)結構,廣泛應用于各種場景,計算集合中的組內(nèi)平均值是一個常見的操作,本文將深入探討如何使用Java來計算集合中的組內(nèi)平均值,涵蓋基本概念、具體實現(xiàn)、優(yōu)化策略和實用示例,需要的朋友可以參考下2024-06-06
Spring boot @RequestBody數(shù)據(jù)傳遞過程詳解
這篇文章主要介紹了Spring boot @RequestBody數(shù)據(jù)傳遞過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12

