cglib代理和jdk動態代理的差別在於,JDK動態代理程式是基於介面來建立被代理物件的代理實例,而Cglib代理程式基於繼承的方式對被代理類別產生子類別。
本教學作業系統:Windows10系統、jdk15版本、Dell G3電腦。
JDK動態代理和Cglib代理都是Java語言中關於代理的實現方式,二者在使用方式、性能以及適用場景等方面存在一定的差異:
#1、JDK 動態代理:
基於介面來建立被代理物件的代理實例。當物件要被代理時,它必須實作一個或多個介面並依賴JDK函式庫。 JDK動態代理利用反射機制產生一個包含被代理物件的所有介面的代理類,並覆寫介面中的所有方法,可以對目標物件進行代理。
優點:無需引用第三方函式庫,在JRE運行環境中就可以運行,生成代理物件更加簡單、快捷;缺點:僅支援基於介面進行代理,無法對類別進行代理,所以它的作用有限。
2.、Cglib 代理:
#基於繼承的方式對被代理類別產生子類,從而添加代理邏輯。因為它是繼承了被代理類,所以它會受到final類、private、static等不可繼承屬性的影響。
優點:Cglib支援對類別進行代理,即使沒有接口,也可透過設定回呼接口間接地實現。效能比JDK動態代理更高,能夠代理那些沒有實現任何介面的目標物件。
Cglib在產生代理類別的過程中,採用動態產生字節碼的方式,在被代理類別載入之前就完成了代理類別的建立並快取到記憶體中,以後每次呼叫時,都直接使用快取的代理類別。在大多數情況下,Cglib代理比JDK動態代理更適合大規模的方法攔截和增強等場景。
以上是cglib代理和jdk動態代理有什麼區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!