org.springframework.aop

## 接口 MethodMatcher

- 所有已知子接口:
    IntroductionAwareMethodMatcher
  所有已知实现类:
    AbstractRegexpMethodPointcut, AnnotationMethodMatcher, AspectJExpressionPointcut, ControlFlowPointcut, DynamicMethodMatcher, DynamicMethodMatcherPointcut, JdkRegexpMethodPointcut, NameMatchMethodPointcut, StaticMethodMatcher, StaticMethodMatcherPointcut, StaticMethodMatcherPointcutAdvisor

      public interface MethodMatcher

  Part of a `Pointcut`: Checks whether the target method is eligible for advice.

  A MethodMatcher may be evaluated statically or at runtime (dynamically). Static matching involves method and (possibly) method attributes. Dynamic matching also makes arguments for a particular call available, and any effects of running previous advice applying to the joinpoint.

  If an implementation returns `false` from its `isRuntime()` method, evaluation can be performed statically, and the result will be the same for all invocations of this method, whatever their arguments. This means that if the `isRuntime()` method returns `false`, the 3-arg `matches(java.lang.reflect.Method, Class, Object[])` method will never be invoked.

  If an implementation returns `true` from its 2-arg `matches(java.lang.reflect.Method, Class)` method and its `isRuntime()` method returns `true`, the 3-arg `matches(java.lang.reflect.Method, Class, Object[])` method will be invoked immediately before each potential execution of the related advice, to decide whether the advice should run. All previous advice, such as earlier interceptors in an interceptor chain, will have run, so any state changes they have produced in parameters or ThreadLocal state will be available at the time of evaluation.

  从以下版本开始:
    11.11.2003
  作者:
    Rod Johnson
  另请参阅:
    `Pointcut`, `ClassFilter`

- - ### 字段概要

    字段
    限定符和类型 | 字段和说明
    --- | ---
    `static MethodMatcher` | `TRUE` Canonical instance that matches all methods.

  - ### 方法概要

    所有方法 实例方法 抽象方法
    限定符和类型 | 方法和说明
    --- | ---
    `boolean` | `isRuntime()` Is this MethodMatcher dynamic, that is, must a final call be made on the `matches(java.lang.reflect.Method, Class, Object[])` method at runtime even if the 2-arg matches method returns `true`?
    `boolean` | `matches(Method method, Class<?> targetClass)` Perform static checking whether the given method matches.
    `boolean` | `matches(Method method, Class<?> targetClass, Object... args)` Check whether there a runtime (dynamic) match for this method, which must have matched statically.

- - ### 字段详细资料

    - #### TRUE

          static final MethodMatcher TRUE

      Canonical instance that matches all methods.

  - ### 方法详细资料

    - #### matches

          boolean matches(Method method,
                          @Nullable
                          Class<?> targetClass)

      Perform static checking whether the given method matches.

      If this returns `false` or if the `isRuntime()` method returns `false`, no runtime check (i.e. no `matches(java.lang.reflect.Method, Class, Object[])` call) will be made.

      参数:
        `method` - the candidate method
        `targetClass` - the target class (may be `null`, in which case the candidate class must be taken to be the method's declaring class)
      返回:
        whether or not this method matches statically

    - #### isRuntime

          boolean isRuntime()

      Is this MethodMatcher dynamic, that is, must a final call be made on the `matches(java.lang.reflect.Method, Class, Object[])` method at runtime even if the 2-arg matches method returns `true`?

      Can be invoked when an AOP proxy is created, and need not be invoked again before each method invocation,

      返回:
        whether or not a runtime match via the 3-arg `matches(java.lang.reflect.Method, Class, Object[])` method is required if static matching passed

    - #### matches

          boolean matches(Method method,
                          @Nullable
                          Class<?> targetClass,
                          Object... args)

      Check whether there a runtime (dynamic) match for this method, which must have matched statically.

      This method is invoked only if the 2-arg matches method returns `true` for the given method and target class, and if the `isRuntime()` method returns `true`. Invoked immediately before potential running of the advice, after any advice earlier in the advice chain has run.

      参数:
        `method` - the candidate method
        `targetClass` - the target class (may be `null`, in which case the candidate class must be taken to be the method's declaring class)
        `args` - arguments to the method
      返回:
        whether there's a runtime match
      另请参阅:
        `matches(Method, Class)`