Springインターセプターはクラス内のメソッド呼び出しをインターセプトできません

スプリングフレームワークを使用する場合、最も使用される機能はスプリングインターセプターです。一般に、トランザクションアノテーション@Transactionalなど、アノテーションを使用してインターセプトを使用します。ただし、クラス内のメソッド呼び出しの場合、インターセプターは無効です。

具体的な例は次のとおりです。

package com.juying.test

public class TestAop {
    public void test1() {
        test2();
        test3();
    }

    public void test2() {
        System.out.println("test2");
    }

    public void test3() {
        System.out.println("test3");
    }
}

インターセプター

@Aspect
public class TheAspect {
    @Before("execution(* com.juying.test.TestAop.*(..))")  
    public void checkData() {
        System.out.println("checkData");
    }
}

TestAopクラスのtest1メソッドを実行すると、checkDataが1回だけ出力されます。

理由:インターセプターは動的プロキシーによって実現されます。動的プロキシーは、新しいプロキシー・クラスを生成することです。すべての情報(クラス名、パッケージ名)が変更されたため、インターセプトできません

public class TestAopXxxxx+地址 {
    public void test1() {
        test2();
        test3();
    }

    public void test2() {
        System.out.println("test2");
    }

    public void test3() {
        System.out.println("test3");
    }
}

解決策:
1.他のクラスにインターセプトする必要のあるメソッドを移行します
2.これを使用する代わりに、@ Autowiredインジェクションを呼び出します

190件の元の記事を公開 19件の賞賛 200,000回以上の閲覧

おすすめ

転載: blog.csdn.net/zengchenacmer/article/details/78207559
おすすめ