Spring 中 JDK 動態代理和 CGLib 代理的區別


Spring AOP 是基於代理的。Spring 使用兩種型別的代理策略,一種是 JDK 動態代理,另一種是 CGLib 代理。

JDK 動態代理隨 JDK 一起提供。它只能透過介面進行代理,因此目標類需要實現介面。如果您的類實現了 一個或多個介面,那麼 Spring 將自動使用 JDK 動態代理。

另一方面,CGLib 是一個第三方庫,Spring 使用它來建立代理。它可以透過子類化建立代理。如果類沒有實現介面,Spring 將使用 CGLib 進行代理。

序號關鍵JDK 動態代理CGLib 代理
1
基礎
它只能透過介面進行代理,因此目標類需要實現介面
它可以透過子類化建立代理
2

它隨 Java 一起提供
它是一個第三方庫。
3
效能
它比 CGLib 代理稍微慢一些
它比 JDK 動態代理快
4.
最終
最終類和最終方法不能被代理
最終類和最終方法不能被代理
5..
用例
當類實現一個或多個介面時,Spring 使用 JDK 代理
當類沒有實現介面時,Spring 使用 CGLib 代理

更新於: 2020-09-09

3K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告