亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

spring aop兩種代理混用問題

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

一、首先復習一下兩種代理

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

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

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

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

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

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

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

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

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

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

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

spring的aop和代理模式理解

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

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

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

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

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

Aop的最大意義是

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

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

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

相關(guān)文章

  • Java中的@Builder注解問題詳解

    Java中的@Builder注解問題詳解

    這篇文章主要介紹了Java中的@Builder注解詳解,@Builder 注解的其中一個大坑會導致默認值失效,這是使用此注解出現(xiàn)的一個問題,總的來說,不推薦再使用 @Builder 注解,接下來講重點介紹其原因和替代方案,需要的朋友可以參考下
    2023-10-10
  • 基于Java檢查IPv6地址的合法性

    基于Java檢查IPv6地址的合法性

    這篇文章主要介紹了基于Java檢查IPv6地址的合法性,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • Maven依賴作用域和依賴傳遞的使用

    Maven依賴作用域和依賴傳遞的使用

    本文主要介紹了Maven依賴作用域和依賴傳遞的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • Java軟件設計模式之適配器模式詳解

    Java軟件設計模式之適配器模式詳解

    這篇文章主要介紹了Java軟件設計模式之適配器模式詳解,適配器模式可分為對象適配器和類適配器兩種,在對象適配器模式中,適配器與適配者之間是關(guān)聯(lián)關(guān)系;在類適配器模式中,適配器與適配者之間是繼承(或?qū)崿F(xiàn))關(guān)系,需要的朋友可以參考下
    2023-07-07
  • mybatis如何實現(xiàn)in傳入數(shù)組查詢

    mybatis如何實現(xiàn)in傳入數(shù)組查詢

    這篇文章主要介紹了mybatis如何實現(xiàn)in傳入數(shù)組查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringBoot整合Thymeleaf與FreeMarker視圖層技術(shù)

    SpringBoot整合Thymeleaf與FreeMarker視圖層技術(shù)

    在目前的企業(yè)級應用開發(fā)中,前后端分離是趨勢,但是視圖層技術(shù)還占有一席之地。Spring Boot 對視圖層技術(shù)提供了很好的支持,福安防推薦使用的模板引擎是Thymeleaf,不過想FreeMarker也支持,JSP技術(shù)在這里并不推薦使用
    2022-08-08
  • MyBatis常用標簽大全

    MyBatis常用標簽大全

    這篇文章主要介紹了MyBatis常用標簽大全的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.Transformer異常

    Caused by: java.lang.ClassNotFoundException: org.apache.comm

    這篇文章主要介紹了Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type異常,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 微信公眾號開發(fā)之回復圖文消息java代碼

    微信公眾號開發(fā)之回復圖文消息java代碼

    這篇文章主要為大家詳細介紹了微信公眾號開發(fā)之回復圖文消息java代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Async的線程池使用選擇解析

    Async的線程池使用選擇解析

    這篇文章主要為大家介紹了Async的線程池使用選擇解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06

最新評論