パッケージ org.springframework.aop

インターフェース MethodMatcher

すべての既知のサブインターフェース:
IntroductionAwareMethodMatcher
すべての既知の実装クラス:
AbstractRegexpMethodPointcutAnnotationMethodMatcherAspectJExpressionPointcutControlFlowPointcutDynamicMethodMatcherDynamicMethodMatcherPointcutJCacheOperationSourcePointcutJdkRegexpMethodPointcutNameMatchMethodPointcutStaticMethodMatcherStaticMethodMatcherPointcutStaticMethodMatcherPointcutAdvisor

public interface MethodMatcher
Pointcut の一部: ターゲットメソッドがアドバイスの対象かどうかをチェックします。

MethodMatcher は静的に評価することも、 実行時 (動的に) 評価することもできます。静的マッチングには、メソッドと (場合によっては) メソッド属性が含まれます。動的マッチングにより、特定の呼び出しの引数が使用可能になり、以前のアドバイスを実行した結果がジョインポイントに適用されます。

実装が isRuntime() メソッドから false を返す場合、評価は静的に実行でき、引数が何であっても、結果はこのメソッドのすべての呼び出しで同じになります。つまり、isRuntime() メソッドが false を返す場合、3 引数の matches(Method, Class, Object[]) メソッドは呼び出されません。

実装が 2 引数の matches(Method, Class) メソッドから true を返し、その isRuntime() メソッドが true を返す場合、 関連するアドバイスが実行される可能性があるたびに、そのアドバイスを実行するかどうかを決定するために、3 引数の matches(Method, Class, Object[]) メソッドが直前に呼び出されます。インターセプターチェーン 内の以前のインターセプターなど、以前のアドバイスはすべて実行されているため、パラメーターまたは ThreadLocal 状態で生成された状態変更は評価時に利用可能になります。

警告 : キャッシュシナリオでマッチャーを使用できるようにするには、このインターフェースの具体的な実装で Object.equals(Object)SEObject.hashCode()Object.toString() の適切な実装を提供する必要があります。たとえば、CGLIB によって生成されたプロキシ内です。Spring Framework 6.0.13 以降、toString() 実装は、equals() の実装に使用されるロジックと一致する一意の文字列表現を生成する必要があります。例については、フレームワーク内でのこのインターフェースの具体的な実装を参照してください。

導入:
11.11.2003
作成者:
Rod Johnson, Sam Brannen
関連事項:
  • フィールドサマリー

    フィールド
    修飾子と型
    フィールド
    説明
    static final MethodMatcher
    すべてのメソッドに一致する MethodMatcher の正規インスタンス。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    boolean
    これは MethodMatcher 動的ですか ? つまり、matches(Method, Class) が true を返した場合でも、実行時に matches(Method, Class, Object[]) メソッドを介して最終チェックを行う必要がありますか ?
    boolean
    matches(MethodSE method, ClassSE<?> targetClass)
    静的チェックを実行して、指定されたメソッドが一致するかどうかを判断します。
    boolean
    matches(MethodSE method, ClassSE<?> targetClass, ObjectSE... args)
    このメソッドに実行時 (動的) 一致があるかどうかを確認します (静的に一致している必要があります)。
  • フィールドの詳細

    • TRUE

      static final MethodMatcher TRUE
      すべてのメソッドに一致する MethodMatcher の正規インスタンス。
  • メソッドの詳細

    • matches

      boolean matches(MethodSE method, ClassSE<?> targetClass)
      静的チェックを実行して、指定されたメソッドが一致するかどうかを判断します。

      このメソッドが false を返す場合、または isRuntime() が false を返す場合、実行時チェックは行われません (つまり、matches(Method, Class, Object[]) 呼び出しは行われません)。

      パラメーター:
      method - 候補メソッド
      targetClass - ターゲットクラス
      戻り値:
      このメソッドが静的に一致するかどうか
    • isRuntime

      boolean isRuntime()
      これは MethodMatcher 動的ですか ? つまり、matches(Method, Class) が true を返した場合でも、実行時に matches(Method, Class, Object[]) メソッドを介して最終チェックを行う必要がありますか ?

      AOP プロキシの作成時に呼び出すことができ、各メソッドを呼び出す前に再度呼び出す必要はありません。

      戻り値:
      静的マッチングが成功した場合に、matches(Method, Class, Object[]) によるランタイムマッチングが必要かどうか
    • matches

      boolean matches(MethodSE method, ClassSE<?> targetClass, ObjectSE... args)
      このメソッドに実行時 (動的) 一致があるかどうかを確認します (静的に一致している必要があります)。

      このメソッドは、指定されたメソッドとターゲットクラスに対して matches(Method, Class) が true を返す場合、および isRuntime() が true を返す場合にのみ呼び出されます。

      アドバイスが実行される可能性がある直前に呼び出されます。after any アドバイス は、アドバイスの中で先に チェーン が実行されています。

      パラメーター:
      method - 候補メソッド
      targetClass - ターゲットクラス
      args - メソッドの引数
      戻り値:
      ランタイム一致があるかどうか
      関連事項: