最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring AOP 支持哪兩種動態(tài)代理方式(最新推薦)

 更新時間:2025年06月27日 10:09:17   作者:冰糖心書房  
動態(tài)代理在運行時創(chuàng)建目標對象的增強代理,Spring AOP支持JDK代理(基于接口)和CGLIB代理(基于繼承),Spring Boot默認使用CGLIB解決方法自調(diào)用問題,也可通過配置切換代理方式,本文給大家介紹Spring AOP支持哪兩種動態(tài)代理方式,感興趣的朋友一起看看吧

什么是動態(tài)代理?

動態(tài)代理就是,在程序運行期,創(chuàng)建目標對象的代理對象,并對目標對象中的方法進行功能性增強的一種技術。

在生成代理對象的過程中,目標對象不變,代理對象中的方法是目標對象方法的增強方法。可以理解為運行期間,對象中方法的動態(tài)攔截,在攔截方法的前后執(zhí)行功能操作。

Spring AOP 支持以下兩種動態(tài)代理方式:

  1. JDK 動態(tài)代理 (JDK Dynamic Proxy)
  2. CGLIB 代理 (Code Generation Library)

Spring 框架會根據(jù)你的業(yè)務對象(目標對象)的情況,智能地選擇其中一種來創(chuàng)建代理。

1. JDK 動態(tài)代理

  • 技術基礎:Java 官方提供的 java.lang.reflect.Proxy 類和 java.lang.reflect.InvocationHandler 接口,是 Java 原生支持的。
  • 實現(xiàn)方式:在運行時,創(chuàng)建一個新的代理類,這個代理類會實現(xiàn)目標對象所實現(xiàn)的所有接口。
  • 硬性要求被代理的目標對象必須實現(xiàn)至少一個接口。 如果一個類沒有實現(xiàn)任何接口,JDK 動態(tài)代理就無法為其創(chuàng)建代理。
  • 工作流程:當你調(diào)用代理對象的方法時,這個調(diào)用會被轉發(fā)到 InvocationHandlerinvoke() 方法中。Spring AOP 在 invoke() 方法內(nèi)部織入了你的切面邏輯(如 @Before、@After 等),然后再通過 Java 的反射機制調(diào)用原始目標對象的方法。

2. CGLIB 代理

  • 技術基礎:一個強大的第三方代碼生成庫(Spring 內(nèi)部集成了它),它通過字節(jié)碼增強 (Bytecode Enhancement) 技術來工作。
  • 實現(xiàn)方式:在運行時,動態(tài)地創(chuàng)建一個被代理對象的子類作為代理對象。
  • 硬性要求:被代理的目標類不能是 final 類,需要被代理的方法也不能是 finalprivate,因為子類無法繼承 final 類或重寫 final/private 方法。
  • 工作流程:代理類會重寫(Override)父類(即你的目標對象)中所有非 final 的方法。在這些重寫的方法里,Spring AOP 織入了切面邏輯,然后再通過調(diào)用 super.method() 來執(zhí)行原始目標對象的業(yè)務邏輯。

Spring 如何選擇?

這是面試中的高頻問題,因為這個默認行為在不同版本中有所變化。

場景Spring 的選擇
目標對象實現(xiàn)了接口老的 Spring 版本傳統(tǒng) Spring XML 配置中,默認使用 JDK 動態(tài)代理。

Spring Boot (2.x 及以后) 中,為了統(tǒng)一行為和解決一些代理問題,默認依然使用 CGLIB。
目標對象沒有實現(xiàn)接口無論在哪個版本,都只能使用 CGLIB。

為什么 Spring Boot 默認使用 CGLIB?
主要原因是為了解決“方法自調(diào)用時 AOP 失效”的問題,并提供更一致的行為。使用 CGLIB 可以確保即使目標對象實現(xiàn)了接口,代理的也是類本身,這在處理一些復雜的依賴注入和內(nèi)部調(diào)用場景時更加可靠。

當然,你也可以通過在 application.properties 中進行配置來改變這個默認行為:

# 如果設置為 true (默認值),則統(tǒng)一使用 CGLIB
# 如果設置為 false,則在目標對象實現(xiàn)接口時,會優(yōu)先使用 JDK 動態(tài)代理
spring.aop.proxy-target-class=true 

總結對比

特性JDK 動態(tài)代理CGLIB 代理
代理方式基于接口 (實現(xiàn)共同接口)基于繼承 (創(chuàng)建子類)
前提條件目標對象必須實現(xiàn)接口目標對象不能是 final 類
性能在早期版本中,通過反射調(diào)用性能略低于 CGLIB。但在目前JDK 版本中,兩者性能差距已經(jīng)非常小。性能通常被認為略高,因為它直接操作字節(jié)碼并調(diào)用 super。
Spring Boot 默認

到此這篇關于Spring AOP 支持哪兩種動態(tài)代理方式?的文章就介紹到這了,更多相關spring aop動態(tài)代理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • spring?boot中spring框架的版本升級圖文教程

    spring?boot中spring框架的版本升級圖文教程

    Spring Boot是一款基于Spring框架的快速開發(fā)框架,它提供了一系列的開箱即用的功能和組件,這篇文章主要給大家介紹了關于spring?boot中spring框架的版本升級的相關資料,需要的朋友可以參考下
    2023-10-10
  • Java的Shiro框架認證流程詳解

    Java的Shiro框架認證流程詳解

    這篇文章主要介紹了Java的Shiro框架認證流程詳解,Shiro 是一個功能強大和易于使用的安全框架,為開發(fā)人員提供一個直觀而全面的解決方案的認證,授權,加密,會話管理四大功能,需要的朋友可以參考下
    2024-01-01
  • Spring Boot配置特定屬性spring.profiles的方法

    Spring Boot配置特定屬性spring.profiles的方法

    這篇文章主要介紹了Spring Boot配置特定屬性spring.profiles的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • 詳解Java快速上手用戶后臺管理系統(tǒng)

    詳解Java快速上手用戶后臺管理系統(tǒng)

    只有在實戰(zhàn)中練習才能真正獲得能力的提升,本篇文章手把手帶你用Java快速上手實現(xiàn)一個用戶后臺管理系統(tǒng),大家可以在過程中查缺補漏,提升水平
    2022-01-01
  • java使用sigar 遇到問題的快速解決方法

    java使用sigar 遇到問題的快速解決方法

    下面小編就為大家?guī)硪黄猨ava使用sigar 遇到問題的快速解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Java基礎之集合框架詳解

    Java基礎之集合框架詳解

    這篇文章主要介紹了Java基礎之集合框架詳解,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Spring?boot?security權限管理集成cas單點登錄功能的實現(xiàn)

    Spring?boot?security權限管理集成cas單點登錄功能的實現(xiàn)

    這篇文章主要介紹了Spring?boot?security權限管理集成cas單點登錄,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • java swing實現(xiàn)簡單的五子棋游戲

    java swing實現(xiàn)簡單的五子棋游戲

    這篇文章主要為大家詳細介紹了java swing實現(xiàn)簡單的五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Java 在生活中的 10 大應用

    Java 在生活中的 10 大應用

    這篇文章主要給大家分享Java 在生活中的 10 大應用,桌面圖形用戶界面、移動應用、人工智能、網(wǎng)絡應用程序、大數(shù)據(jù)技術、游戲應用、商業(yè)應用、嵌入式系統(tǒng)、云應用、科學應用,下文來看具體應用介紹,需要的朋友可以參考一下
    2021-11-11
  • Java中四種引用詳解

    Java中四種引用詳解

    這篇文章主要為大家介紹了Java中的四種引用,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12

最新評論

长沙市| 社会| 高阳县| 南城县| 曲阜市| 龙泉市| 中阳县| 班戈县| 吉首市| 葫芦岛市| 巴南区| 阿巴嘎旗| 南城县| 黄石市| 乡城县| 鹤岗市| 上栗县| 象州县| 北票市| 安徽省| 顺昌县| 东乡族自治县| 大洼县| 舒兰市| 鹤岗市| 横峰县| 威海市| 陆丰市| 华坪县| 邵阳市| 平昌县| 武夷山市| 威海市| 崇明县| 清河县| 正蓝旗| 承德县| 连州市| 手游| 湾仔区| 耿马|