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 代理 |
廣告