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

關(guān)于spring?aop兩種代理混用的問題

 更新時間:2021年11月24日 15:01:47   作者:babyLetsGo  
這篇文章主要介紹了關(guān)于spring?aop兩種代理混用的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

spring aop兩種代理混用問題

工作繁忙,但是遇到問題還是要總結(jié)積累下來,今天項目中出現(xiàn)了代理混用的問題,解決之后記錄一下對兩種代理方式的學(xué)習(xí)理解。

一、首先復(fù)習(xí)一下兩種代理

JDK動態(tài)代理 和 cglib代理

1、如果目標(biāo)對象實現(xiàn)了接口,默認(rèn)情況下會采用JDK的動態(tài)代理實現(xiàn)AOP

2、如果目標(biāo)對象實現(xiàn)了接口,可以強(qiáng)制使用CGLIB實現(xiàn)AOP

3、如果目標(biāo)對象沒有實現(xiàn)了接口,必須采用CGLIB庫,spring會自動在JDK動態(tài)代理和CGLIB之間轉(zhuǎn)換

Spring AOP的原理是 JDK 動態(tài)代理和CGLIB字節(jié)碼增強(qiáng)技術(shù),前者需要被代理類實現(xiàn)相應(yīng)接口,也只有接口中的方法可以被JDK動態(tài)代理技術(shù)所處理;后者實際上是生成一個子類,來覆蓋被代理類,那么父類的final方法就不能代理,因為父類的final方法不能被子類所覆蓋。一般而言Spring默認(rèn)優(yōu)先使用JDK動態(tài)代理技術(shù),只有在被代理類沒有實現(xiàn)接口時,才會選擇使用CGLIB技術(shù)來實現(xiàn)AOP。

但是也提供了配置參數(shù)來強(qiáng)制選擇使用 CGLIB 技術(shù),如下:

<aop:config proxy-target-class="true" /> 

proxy-target-class="true" 表示強(qiáng)制使用 CGLIB 技術(shù)來實現(xiàn)AOP,因為CGLIB是生成子類也就是代理類來實現(xiàn)的,所以proxy-target-class,表示是否代理目標(biāo)類。<aop:config /> 就會由spring來選擇,spring優(yōu)先使用JDK動態(tài)代理來實現(xiàn)AOP。

二、我們項目是spring-boot項目

默認(rèn)即為proxy-target-class="true",service實現(xiàn)類使用@service注解后都是使用CGLIB代理。

我遇到問題是,service某個方法添加@Async注解使該方法可異步調(diào)用,然后原有從spring容器中獲取Bean對象的方法運(yùn)行時就報錯了,原來這個service實現(xiàn)類就不在使用CGLIB而是直接使用JDK動態(tài)代理。時間緊迫,具體原因后續(xù)再次分析,今天的記錄就先到這里。

spring的aop和代理模式理解

Spring的AOP:即面向切面編程,其代碼實質(zhì),即代理模式的應(yīng)用。

代理模式代碼的主要特點是

不改變原有類的前提下,在原有類某些方法執(zhí)行前后,插入任意代碼。所以代理模式需要寫新的類對原有的類進(jìn)行包裝。

代理模式目前實現(xiàn)的方式有三種

  • 靜態(tài)代理:需要增強(qiáng)原有類的哪個方法,就需要對在代理類中包裝哪個方法。個人理解,從功能上來說,原有類和代理類不一定要實現(xiàn)共同接口,但是為了賦予代理和和被代理類之間的邏輯關(guān)系,增加程序的可讀性,可理解性,邏輯性,增加代理對象和被代理對象之間的關(guān)系,以更加符合面向?qū)ο缶幊淌撬季S,而應(yīng)該實現(xiàn)共同接口。
  • 動態(tài)代理:使用反射機(jī)制,方法和對象都是傳入的變量,就可以經(jīng)過傳入的對象和方法而動態(tài)調(diào)用被代理對象的任何方法,jdk中提供了實現(xiàn)此動態(tài)代理的api,被代理類必須實現(xiàn)接口
  • Cglib代理:返回對象是代理對象的子類,不需要代理對象實現(xiàn)接口。當(dāng)調(diào)用原對象方法時,實際上調(diào)用的是代理子類的方法。

Aop的最大意義是

在不改變原來代碼的前提下,也不對源代碼做任何協(xié)議接口要求。而實現(xiàn)了類似插件的方式,來修改源代碼,給源代碼插入新的執(zhí)行代碼。

Struts2中的攔截器,spring中的賴加載都是用代理模式實現(xiàn)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Java設(shè)計模式編程中的訪問者模式

    詳解Java設(shè)計模式編程中的訪問者模式

    這篇文章主要介紹了Java設(shè)計模式編程中的訪問者模式,訪問者模式的合理利用可以避免項目中出現(xiàn)大量重復(fù)的代碼,需要的朋友可以參考下
    2016-02-02
  • 使用Java讀取Excel文件數(shù)據(jù)的方法詳解

    使用Java讀取Excel文件數(shù)據(jù)的方法詳解

    通過編程方式讀取Excel數(shù)據(jù)能實現(xiàn)數(shù)據(jù)導(dǎo)入、批量處理、數(shù)據(jù)比對和更新等任務(wù)的自動化,本文為大家介紹了三種Java讀取Excel文件數(shù)據(jù)的方法,需要的可以參考下
    2024-01-01
  • Java AOP實現(xiàn)自定義滑動窗口限流器方法詳解

    Java AOP實現(xiàn)自定義滑動窗口限流器方法詳解

    這篇文章主要介紹了Java AOP實現(xiàn)自定義滑動窗口限流器方法,其中滑動窗口算法彌補(bǔ)了計數(shù)器算法的不足,滑動窗口算法把間隔時間劃分成更小的粒度,當(dāng)更小粒度的時間間隔過去后,把過去的間隔請求數(shù)減掉,再補(bǔ)充一個空的時間間隔,需要的朋友可以參考下
    2022-07-07
  • MyBatis 多表操作的實現(xiàn)

    MyBatis 多表操作的實現(xiàn)

    這篇文章主要介紹了MyBatis 多表操作的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • SpringBoot前后端接口對接常見錯誤小結(jié)

    SpringBoot前后端接口對接常見錯誤小結(jié)

    SpringBoot前后端接口對接工作時,經(jīng)常遇到請求500,400等問題,本文主要介紹了SpringBoot前后端接口對接常見錯誤小結(jié),感興趣的可以了解一下
    2022-01-01
  • spring mvc 組合mybatis框架實例詳解

    spring mvc 組合mybatis框架實例詳解

    本項目采用 maven 結(jié)構(gòu),主要演示了 spring mvc + mybatis,controller 獲取數(shù)據(jù)后以json 格式返回數(shù)據(jù)。對spring mvc 組合mybatis的方法感興趣的朋友可以參考下本文
    2018-01-01
  • 一文搞懂Java的SPI機(jī)制(推薦)

    一文搞懂Java的SPI機(jī)制(推薦)

    Java定義了一套JDBC的接口,但并未提供具體實現(xiàn)類,而是在不同云廠商提供的數(shù)據(jù)庫實現(xiàn)包。這篇文章給大家介紹Java的SPI機(jī)制,感興趣的朋友一起看看吧
    2021-11-11
  • java隨機(jī)生成10位數(shù)的字符串ID

    java隨機(jī)生成10位數(shù)的字符串ID

    這篇文章主要為大家詳細(xì)介紹了java隨機(jī)生成10位數(shù)字符串ID的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Spring Boot利用Java Mail實現(xiàn)郵件發(fā)送

    Spring Boot利用Java Mail實現(xiàn)郵件發(fā)送

    這篇文章主要為大家詳細(xì)介紹了Spring Boot利用Java Mail實現(xiàn)郵件發(fā)送,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • java項目導(dǎo)出為.exe執(zhí)行文件的方法步驟

    java項目導(dǎo)出為.exe執(zhí)行文件的方法步驟

    最近做了個項目,想要轉(zhuǎn)換成可執(zhí)行文件,那么java項目如何導(dǎo)出為.exe執(zhí)行文件,本文就介紹一下,主要使用jar2exe軟件,感興趣的可以了解一下
    2021-05-05

最新評論

德兴市| 包头市| 望江县| 仙桃市| 东乌珠穆沁旗| 巴里| 梁山县| 长岛县| 咸阳市| 斗六市| 海门市| 中方县| 舒城县| 枞阳县| 垫江县| 和田市| 南江县| 海丰县| 镇宁| 扶余县| 盘山县| 噶尔县| 道真| 连平县| 常熟市| 高碑店市| 长海县| 石屏县| 平潭县| 南康市| 旬邑县| 安溪县| 怀化市| 金山区| 金堂县| 吕梁市| 泗洪县| 宁明县| 崇礼县| 游戏| 依安县|