一般代理和全權代理的區別「代理方式有幾種」

代理模式的定義

代理模式(Proxy Pattern)是指為其他對象提供一種代理,以控制對這個對象的訪問。

代理對象在客服端和目標對象之間起到中介作用。

屬於結構型設計模式。

生活中的代理模式

深度分析代理模式

代理模式的適用場景

保護目標對象

增強目標對象

靜態代理

顯式聲明被代理對象

動態代理

動態配置和替換被代理對象

JDK動態代理的實現原理

1、拿到被代理類的引用,並且獲取它的所有的介面(反射獲取)。

2、JDK Proxy類重新生成一個新的類,實現了被代理類所有介面的方法。

3、動態生成Java代碼,把增強邏輯加入到新生成代碼中。

4、編譯生成新的Java代碼的class文件。

5、載入並重新運行新的class,得到類就是全新類。

CGLib動態代理容易踩的坑

1、無法代理final修飾的方法

CGLib和JDK動態代理對比

1.JDK動態代理是實現了被代理對象的介面,CGLib是繼承了被代理對象。

2.JDK和CGLib都是在運行期生成位元組碼,JDK是直接寫Class位元組碼,CGLib使用ASM框架寫Class位元組碼,Cglib代理實現更複雜,生成代理類比JDK效率低。

3.JDK調用代理方法,是通過反射機制調用,CGLib是通過

FastClass機制直接調用方法,CGLib執行效率更高.

代理模式的優點

代理模式能將代理對象與真實被調用的目標對象分離。

一定程度上降低了系統的耦合程度,易於擴展。

代理可以起到保護目標對象的作用。

增強目標對象的職責

代理模式的缺點

代理模式會造成系統設計種類的數目增加

在客戶端和目標對象之間增加了一個代理對象,會造成請求處理速度變慢。

增加了系統的複雜度。

Spring中的代理選擇原則

1、當Bean有實現介面時,Spring就會用JDK的動態代理。

2、當Bean沒有實現介面時,Spring選擇CGLib。

3、Spring可以通過配置強制使用CGLib,只需在Spring的配置文件中加入如下代碼:

<aop:aspectj-autoproxy proxy-target-class=”true”/>

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/268620.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-16 13:10
下一篇 2024-12-16 13:10

相關推薦

發表回復

登錄後才能評論