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

Spring AOP方法內(nèi)部調(diào)用不生效的解決方案

 更新時(shí)間:2025年01月08日 09:00:29   作者:菜鳥日常  
最近有個(gè)需求,統(tǒng)計(jì)某個(gè)方法的調(diào)用次數(shù),開始使用 Spring AOP 實(shí)現(xiàn),后來發(fā)現(xiàn)當(dāng)方法被內(nèi)部調(diào)用時(shí),切面邏輯將不會(huì)生效,所以本文就給大家介紹了Spring AOP方法內(nèi)部調(diào)用不生效的解決方案,需要的朋友可以參考下

問題描述

最近有個(gè)需求,統(tǒng)計(jì)某個(gè)方法的調(diào)用次數(shù),開始使用 Spring AOP 實(shí)現(xiàn),后來發(fā)現(xiàn)當(dāng)方法被內(nèi)部調(diào)用時(shí),切面邏輯將不會(huì)生效,直接上樣例:

定義接口,包含方法 A,方法 B

public interface ISon {
    void A();
    void B();
}

定義接口實(shí)現(xiàn),方法 B 調(diào)用方法 A

@Service
public class Son implements ISon {
    @Override
    public void A() {
        System.out.println("method A");
    }
    @Override
    public void B() {
        System.out.println("method B");
        A();
    }
}

切點(diǎn)定義,對(duì)方法 A 進(jìn)行增強(qiáng)

@Aspect
@Component
public class AspectDemo {

    @Pointcut(value = "execution(* com.example.transactiondemo.aop.ISon.A(..))")
    public void pointCut(){
    }

    @Before("pointCut()")
    public void before(JoinPoint joinPoint){
        System.out.println("before ");
    }

    @After("pointCut()")
    public void after(){
        System.out.println("after ");
    }

}

測(cè)試

@Autowired
private ISon iSon;

@Test
public void test11(){
    iSon.A();
    System.out.println("-----------");
    iSon.B();
}

打印輸出

before 
method A
after 
-----------
method B
method A

可以發(fā)現(xiàn),如果直接使用 實(shí)例調(diào)用 A,會(huì)進(jìn)行增強(qiáng);但是如果是方法 B 調(diào)用,A 的增強(qiáng)邏輯將失效。

失效原因

方法 A 被調(diào)用,是基于 AOP 生成的 代理對(duì)象 進(jìn)行的調(diào)用;方法 B 調(diào)用方法 A ,是 this 目標(biāo)對(duì)象 直接調(diào)用,并不是代理對(duì)象進(jìn)行調(diào)用

5.8. Proxying Mechanisms

解決方案

回到最開始的需求,如何通過切面的方式獲取某一個(gè)方法的調(diào)用次數(shù)? 包括方法自調(diào)用

  • 使用 AopContext.currentProxy()

    切面開啟注解

@EnableAspectJAutoProxy(exposeProxy = true,proxyTargetClass = true)

方法 B 不直接調(diào)用 A

    @Override
    public void B() {
        System.out.println("method B");
        ((Son) AopContext.currentProxy()).A();
    }

先獲取上下文的 Bean 再調(diào)用

@Autowired
private ApplicationContext applicationContext;

((Son) applicationContext.getBean(Son.class)).A();

以上就是Spring AOP方法內(nèi)部調(diào)用不生效的解決方案的詳細(xì)內(nèi)容,更多關(guān)于Spring AOP方法調(diào)用不生效的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java通過MySQL的加解密函數(shù)實(shí)現(xiàn)敏感字段存儲(chǔ)

    Java通過MySQL的加解密函數(shù)實(shí)現(xiàn)敏感字段存儲(chǔ)

    這篇文章主要介紹了如何在Java中MySQL的加解密函數(shù)實(shí)現(xiàn)敏感字段存儲(chǔ),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-03-03
  • Spring Security自定義認(rèn)證器的實(shí)現(xiàn)代碼

    Spring Security自定義認(rèn)證器的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Spring Security自定義認(rèn)證器的實(shí)現(xiàn)代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Spring?Boot整合郵箱發(fā)送郵件實(shí)例

    Spring?Boot整合郵箱發(fā)送郵件實(shí)例

    大家好,本篇文章主要講的是Spring?Boot整合郵箱發(fā)送郵件實(shí)例,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • Java 泛型實(shí)例詳解

    Java 泛型實(shí)例詳解

    本文主要介紹Java 泛型的知識(shí),這里給代碼實(shí)例對(duì)Java 泛型深度理解,有需要的朋友可以看下
    2016-07-07
  • SpringCache之 @CachePut的使用

    SpringCache之 @CachePut的使用

    這篇文章主要介紹了SpringCache之 @CachePut的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 基于微信簽名signature獲取(實(shí)例講解)

    基于微信簽名signature獲取(實(shí)例講解)

    下面就為大家?guī)硪黄谖⑿藕灻鹲ignature獲取(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • 如何解決SpringBoot集成百度UEditor圖片上傳后直接訪問404

    如何解決SpringBoot集成百度UEditor圖片上傳后直接訪問404

    在本篇文章里小編給大家整理的是一篇關(guān)于如何解決SpringBoot集成百度UEditor圖片上傳后直接訪問404相關(guān)文章,需要的朋友們學(xué)習(xí)下。
    2019-11-11
  • Java面試之限流的實(shí)現(xiàn)方式小結(jié)

    Java面試之限流的實(shí)現(xiàn)方式小結(jié)

    限流是指在各種應(yīng)用場(chǎng)景中,通過技術(shù)和策略手段對(duì)數(shù)據(jù)流量、請(qǐng)求頻率或資源消耗進(jìn)行有計(jì)劃的限制,本文為大家整理了常見的限流的實(shí)現(xiàn)方式,有需要的可以參考下
    2024-02-02
  • SpringBoot整合Redisson實(shí)現(xiàn)分布式鎖

    SpringBoot整合Redisson實(shí)現(xiàn)分布式鎖

    本文主要介紹了SpringBoot整合Redisson實(shí)現(xiàn)分布式鎖,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • MyEclipse配置JDK的全過程

    MyEclipse配置JDK的全過程

    這篇文章主要介紹了MyEclipse配置JDK的全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評(píng)論

崇礼县| 呈贡县| 巍山| 小金县| 子长县| 湘西| 南和县| 闻喜县| 大名县| 大名县| 彭山县| 拜城县| 丹江口市| 九寨沟县| 新密市| 集贤县| 渭源县| 卫辉市| 平安县| 福建省| 民乐县| 论坛| 惠来县| 岫岩| 方城县| 兴山县| 元氏县| 永和县| 台中市| 定结县| 赫章县| 衢州市| 安图县| 英超| 梧州市| 通许县| 三都| 天峨县| 崇文区| 衡阳市| 卫辉市|