@transactionalがクラスレベルで適用された場合に@transactional引数をインターセプトする方法

RV:

@transactionalの引数がクラスレベルで適用されている場合は、それを取得します。

たとえば、次の@transactionalようなメソッドレベルで適用した場合

class A {

    @transactional(readOnly= true)
    public void someMethod(){
      // some code...
     }
}

次に、次のようなコードを使用して、正式な引数、つまりreadOnlyをインターセプトしてキャプチャできます。

@Aspect
@Component
@Order(0)
public class ReadOnlyRouteInterceptor {

    private static final Logger logger = LoggerFactory.getLogger(ReadOnlyRouteInterceptor.class);

    @Around("@annotation(transactional)")
    public Object proceed(ProceedingJoinPoint proceedingJoinPoint, Transactional transactional) {
            if (transactional.readOnly())
             //do something
    }

ただし、上記のコードは@transactional、クラスレベルで次のように適用すると機能しません

@transactional(readOnly= true)
class A {

    public void someMethod(){
      // some code...
     }
}

ここで@transactional、クラスレベルで適用される注釈をインターセプトするために、次のコードがあります。

@Pointcut("@within(org.springframework.transaction.annotation.Transactional *)")
public void beanAnnotatedWithTransactional() {}

@Pointcut("execution(public * *(..))")
public void publicMethod() {}

@Pointcut("publicMethod() && beanAnnotatedWithTransactional()")
public void publicMethodInsideAClassMarkedWithATransactional() {}

ここでの実際の問題@transactionalは、クラスレベルで適用されている場合、readOnlyフラグの値を確認できないことです。

fg78nc:

タイプレベルの注釈の場合:

@Around("@within(transactional)")
public Object myMethod(ProceedingJoinPoint pjp, Transactional transactional) throws Throwable {
    boolean readOnly = transactional.readOnly();
    ...
    return pjp.proceed();
}

メソッドレベルのアノテーションの場合:

  @Around("execution(public * *(..)) && @annotation(org.springframework.transaction.annotation.Transactional)")
    public Object myMethod(ProceedingJoinPoint pjp) throws Throwable {
        MethodSignature signature = (MethodSignature) pjp.getSignature();
        Method method = signature.getMethod();

        Transactional annotation = method.getAnnotation(org.springframework.transaction.annotation.Transactional.class);
        boolean value = annotation. readOnly();
        ...
        return pjp.proceed();
    }

メソッドレベルの別の(よりクリーンな)オプション:

@Around("@annotation(transactional)")
 public Object myMethod(ProceedingJoinPoint pjp, Transactional transactional) throws Throwable {

}

または

タガーをより詳細に制御する場合:

    @Around("execution(@org.springframework.transaction.annotation.Transactional public * *(..)) && @annotation("transactional")
     public Object myMethod(ProceedingJoinPoint pjp, Transactional transactional) throws Throwable {

}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

SWIGマルチ引数タイプマップは関数に適用されますが、複数のコンストラクターがある場合はコンストラクターには適用されません。

分類Dev

クエリセットの引数の1つがURLパラメータに由来するクラスベースのビューで実行されたクエリセットに基づいてテンプレートを表示する方法

分類Dev

テンプレート引数が与えられた場合、これが実際にパラメータ化されたテンプレートクラスであるかどうかを確認するにはどうすればよいですか?

分類Dev

与えられたテンプレート引数が型定義を提供する場合、sfinaeでコンストラクターを有効にする

分類Dev

Cocoaでセグメント化されたコントロールをプログラミングする場合、インスタンスに送信されたエラー認識されないセレクターはどういう意味ですか?

分類Dev

基本クラスのポインタベクトルの要素にオーバーロードされた多態化関数を適用する方法

分類Dev

テンプレート引数が特定のクラスのインスタンス化を許可しない場合にフォールバックがトリガーされるテンプレートオーバーロード関数を作成する方法

分類Dev

可変個引数テンプレートの場合にテンプレートテンプレートパラメータを適用する方法

分類Dev

オンラインデータベースで行った変更を適用するために、セルが複製されています

分類Dev

セレクターが外部からロードされた場合にクリックイベントをトリガーする方法

分類Dev

グループ化されたセットに関数を適用し、列を既存のデータフレームにバインドする方法

分類Dev

Kafkaテンプレート-ワイルドカードを使用する場合の引数には適用されません

分類Dev

n個を超える引数が指定されている場合にのみ可変個引数テンプレートコンストラクターをenable_ifするにはどうすればよいですか?

分類Dev

インスタンスメソッドが静的コンテキストで使用されている場合、javacが「エラー:クラスのメソッドを特定のタイプに適用できない」と出力するのはなぜですか?

分類Dev

配列が特定のタイプである場合にのみ、テンプレート化された引数を配列に追加します

分類Dev

複数のクラス、ID、または要素を参照する場合、cssセレクターはどのように適用されますか?

分類Dev

引数として渡されたファンクターが引数を取らない場合はテンプレートを有効にする

分類Dev

コンストラクターBicycleクラスは、指定されたタイプには適用できません。必須:int、int found:引数なし理由:実際の引数と前の引数の長さが異なります

分類Dev

リストを作成するために関数をデータフレームに適用するためのベクトル化された方法

分類Dev

リフレクションPHPの使用中にコンストラクター引数が参照である場合、返されるクラスはnullです。

分類Dev

要素がスクリプトによって動的に生成され、クラスセレクターを介してアクセスするときに、Jqueryのクリックイベントで関数を呼び出す方法は?

分類Dev

インデックスがプライベートに設定されている場合にバッファへのアクセスがプライベートであることを確認する方法

分類Dev

子クラスがすでに定義されたコンストラクタを持っている場合でも、親クラスは常にデフォルトまたは引数なしのコンストラクタが必要ですか?

分類Dev

リフレクションによってインスタンスを作成し、引数c#が1つしかない場合に、オーバーロードされた「params」コンストラクターを指定できますか?

分類Dev

ベースと派生の両方が派生型パラメーターでテンプレート化されている場合にベースコンストラクターを呼び出すときのコンパイラエラー

分類Dev

インターセプターでエラーが発生した場合に、コントロールをインターセプターからjspにリダイレクトする方法

分類Dev

テンプレート関数に渡されたベクトルのタイプを判別する方法

分類Dev

可変個引数テンプレートクラスがテンプレート引数から継承されている場合に、基本型のメソッドを呼び出す際のパラメータパックを展開します

分類Dev

コンストラクターで引数として渡された関数ポインターをプライベートインスタンス変数に割り当てるときにエラーが発生しました

Related 関連記事

  1. 1

    SWIGマルチ引数タイプマップは関数に適用されますが、複数のコンストラクターがある場合はコンストラクターには適用されません。

  2. 2

    クエリセットの引数の1つがURLパラメータに由来するクラスベースのビューで実行されたクエリセットに基づいてテンプレートを表示する方法

  3. 3

    テンプレート引数が与えられた場合、これが実際にパラメータ化されたテンプレートクラスであるかどうかを確認するにはどうすればよいですか?

  4. 4

    与えられたテンプレート引数が型定義を提供する場合、sfinaeでコンストラクターを有効にする

  5. 5

    Cocoaでセグメント化されたコントロールをプログラミングする場合、インスタンスに送信されたエラー認識されないセレクターはどういう意味ですか?

  6. 6

    基本クラスのポインタベクトルの要素にオーバーロードされた多態化関数を適用する方法

  7. 7

    テンプレート引数が特定のクラスのインスタンス化を許可しない場合にフォールバックがトリガーされるテンプレートオーバーロード関数を作成する方法

  8. 8

    可変個引数テンプレートの場合にテンプレートテンプレートパラメータを適用する方法

  9. 9

    オンラインデータベースで行った変更を適用するために、セルが複製されています

  10. 10

    セレクターが外部からロードされた場合にクリックイベントをトリガーする方法

  11. 11

    グループ化されたセットに関数を適用し、列を既存のデータフレームにバインドする方法

  12. 12

    Kafkaテンプレート-ワイルドカードを使用する場合の引数には適用されません

  13. 13

    n個を超える引数が指定されている場合にのみ可変個引数テンプレートコンストラクターをenable_ifするにはどうすればよいですか?

  14. 14

    インスタンスメソッドが静的コンテキストで使用されている場合、javacが「エラー:クラスのメソッドを特定のタイプに適用できない」と出力するのはなぜですか?

  15. 15

    配列が特定のタイプである場合にのみ、テンプレート化された引数を配列に追加します

  16. 16

    複数のクラス、ID、または要素を参照する場合、cssセレクターはどのように適用されますか?

  17. 17

    引数として渡されたファンクターが引数を取らない場合はテンプレートを有効にする

  18. 18

    コンストラクターBicycleクラスは、指定されたタイプには適用できません。必須:int、int found:引数なし理由:実際の引数と前の引数の長さが異なります

  19. 19

    リストを作成するために関数をデータフレームに適用するためのベクトル化された方法

  20. 20

    リフレクションPHPの使用中にコンストラクター引数が参照である場合、返されるクラスはnullです。

  21. 21

    要素がスクリプトによって動的に生成され、クラスセレクターを介してアクセスするときに、Jqueryのクリックイベントで関数を呼び出す方法は?

  22. 22

    インデックスがプライベートに設定されている場合にバッファへのアクセスがプライベートであることを確認する方法

  23. 23

    子クラスがすでに定義されたコンストラクタを持っている場合でも、親クラスは常にデフォルトまたは引数なしのコンストラクタが必要ですか?

  24. 24

    リフレクションによってインスタンスを作成し、引数c#が1つしかない場合に、オーバーロードされた「params」コンストラクターを指定できますか?

  25. 25

    ベースと派生の両方が派生型パラメーターでテンプレート化されている場合にベースコンストラクターを呼び出すときのコンパイラエラー

  26. 26

    インターセプターでエラーが発生した場合に、コントロールをインターセプターからjspにリダイレクトする方法

  27. 27

    テンプレート関数に渡されたベクトルのタイプを判別する方法

  28. 28

    可変個引数テンプレートクラスがテンプレート引数から継承されている場合に、基本型のメソッドを呼び出す際のパラメータパックを展開します

  29. 29

    コンストラクターで引数として渡された関数ポインターをプライベートインスタンス変数に割り当てるときにエラーが発生しました

ホットタグ

アーカイブ