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

spring AOP代理執(zhí)行@EnableAspectJAutoProxy的exposeProxy屬性詳解

 更新時間:2023年09月11日 17:18:38   作者:天還下著毛毛雨  
這篇文章主要為大家介紹了spring AOP代理執(zhí)行@EnableAspectJAutoProxy的exposeProxy屬性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

前面講到,以JDK動態(tài)代理方式 的代理對象已經(jīng)創(chuàng)建成功,spring中 使用JDK動態(tài)代理時,傳入的InvokeHandler是JdkDynamicAopProxy類型。

并且數(shù)據(jù)結(jié)構(gòu)是這樣的

并且他的AdvisedSupport advised 屬性是 proxyFactory{

       proxyFactory{
            advisors :符合該類的所有的切面,
            targetSource:被代理目標(biāo)對象
            proxyTargetClass :代理的方式
}

那么實現(xiàn)InvokeHandler接口,那么代理對象調(diào)用方法時,就會調(diào)入Invoke方法 來進(jìn)行具體的增強(qiáng)。spring aop的具體代理邏輯就在這個方法中。

equals和hashCode方法不進(jìn)行代理

首先進(jìn)來會取出代理的目標(biāo)對象,this.advised.targetSource

然后進(jìn)行equals()和hashCode()的判斷,這兩個方法 是不會代理的,直接調(diào)用原生方法

@EnableAspectJAutoProxy配置exposeProxy=true,暴露代理對象

然后如果@EnableAspectJAutoProxy配置的exposeProxy為true的話,

@EnableAspectJAutoProxy(proxyTargetClass = false,exposeProxy = true)

會將代理對象提前放入 ThreadLocal里面,供代理過程中其他地方獲取

應(yīng)用場景

這個挺有用的。比如 某個類的 proxyMethodA() 和 proxyMethodB()都會命中切面,被代理。如果以下面proxyMethodA方法內(nèi)部直接 調(diào)用proxyMethodB()方法,

其實 調(diào)用的原生對象的proxyMethodB()方法,是不會走 proxyMethodB()的代理邏輯的。

@Component
public class ProxyClass implements InterFace {
    public void proxyMethodA() {
        proxyMethodB();
    }

    public void proxyMethodB() {
    }
}

所以,我們要去獲取ProxyClass的代理對象來在proxyMethodA()的方法內(nèi)部 調(diào)用proxyMethodB()

注入自己的代理對象

一種是自己注入自己,那么肯定注入進(jìn)來的是代理對象,那么用代理對象去調(diào)用它的 proxyMethodB()方法,肯定是會走代理的。

@Component
public class ProxyClass implements MyBeanService {
    @Autowired
    ProxyClass proxyClass;
    public void proxyMethodA() {
        // 注入進(jìn)來的是 proxyClass代理對象
        proxyClass.proxyMethodB();
    }
    public void proxyMethodB() {
    }
}

AopContext.currentProxy()

還有一種就是 上面源碼里的AopContext.currentProxy()

會把代理對象放入ThreadLocal中,

直接在 proxyMethodA() 方法內(nèi)部AopContext.currentProxy()獲取到代理對象,然后調(diào)用它的proxyMethodB()

public class ProxyClass implements MyBeanService {
    public void proxyMethodA() {
        Object o = AopContext.currentProxy();
        ((ProxyClass)o).proxyMethodB();
    }
    public void proxyMethodB() {
    }
}

以上就是spring AOP代理執(zhí)行@EnableAspectJAutoProxy的exposeProxy屬性詳解的詳細(xì)內(nèi)容,更多關(guān)于spring AOP執(zhí)行exposeProxy屬性的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java中catalina.home與catalina.base區(qū)別點整理

    java中catalina.home與catalina.base區(qū)別點整理

    在本篇文章里小編給大家整理的是關(guān)于java項目中catalina.home與catalina.base區(qū)別點,需要的朋友們可以學(xué)習(xí)下。
    2020-02-02
  • JNI實現(xiàn)最簡單的JAVA調(diào)用C/C++代碼

    JNI實現(xiàn)最簡單的JAVA調(diào)用C/C++代碼

    這篇文章主要介紹了JNI實現(xiàn)最簡單的JAVA調(diào)用C/C++代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • json-lib將json格式的字符串,轉(zhuǎn)化為java對象的實例

    json-lib將json格式的字符串,轉(zhuǎn)化為java對象的實例

    下面小編就為大家?guī)硪黄猨son-lib將json格式的字符串,轉(zhuǎn)化為java對象的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • java后臺處理前端傳的json串方法

    java后臺處理前端傳的json串方法

    今天小編就為大家分享一篇java后臺處理前端傳的json串方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • SpringCache之 @CachePut的使用

    SpringCache之 @CachePut的使用

    這篇文章主要介紹了SpringCache之 @CachePut的使用,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • springboot中不能獲取post請求參數(shù)的解決方法

    springboot中不能獲取post請求參數(shù)的解決方法

    這篇文章主要介紹了springboot中不能獲取post請求參數(shù)的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Javascript和Java語言有什么關(guān)系?兩種語言間的異同比較

    Javascript和Java語言有什么關(guān)系?兩種語言間的異同比較

    雖然Javascript與Java有緊密的聯(lián)系,但卻是兩個公司開發(fā)的不同的兩個產(chǎn)品。那么js和java有什么關(guān)系,兩種語言的不同點是什么呢?介于這兩個問題,小編一起給大家解答下
    2016-09-09
  • Java groovy內(nèi)存回收測試步驟解析

    Java groovy內(nèi)存回收測試步驟解析

    這篇文章主要介紹了Java groovy內(nèi)存回收測試步驟解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • SpringBoot如何解析應(yīng)用參數(shù)args

    SpringBoot如何解析應(yīng)用參數(shù)args

    文章主要介紹了SpringBoot啟動過程中如何解析`main`函數(shù)中的參數(shù)`args`,包括如何解析命令行參數(shù)、訪問選項參數(shù)和非選項參數(shù),接著,介紹了`ApplicationArguments`接口及其方法,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • MyBatis自定義resultMap三種映射關(guān)系示例詳解

    MyBatis自定義resultMap三種映射關(guān)系示例詳解

    這篇文章主要介紹了MyBatis自定義resultMap三種映射關(guān)系,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08

最新評論