public interface MethodMatcher
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.
Concrete implementations of this interface typically should provide proper
implementations of Object.equals(Object)
and Object.hashCode()
in order to allow the matcher to be used in caching scenarios — for
example, in proxies generated by CGLIB.
Pointcut
,
ClassFilter
Modifier and Type | Field and Description |
---|---|
static MethodMatcher |
TRUE
Canonical instance that matches all methods.
|
Modifier and Type | Method and Description |
---|---|
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.
|
static final MethodMatcher TRUE
boolean matches(Method method, Class<?> targetClass)
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 methodtargetClass
- the target classboolean isRuntime()
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,
matches(java.lang.reflect.Method, Class, Object[])
method
is required if static matching passedboolean matches(Method method, Class<?> targetClass, Object... args)
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 methodtargetClass
- the target classargs
- arguments to the methodmatches(Method, Class)