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 in its isRuntime() method, evaluation can be performed
statically, and the result will be the same for all invocations of this method,
whatever their arguments. If the isRuntime() method returns false, the 3-arg matches()
method will never be invoked.
If an implementation returns true in its 2-arg matches() method, and its isRuntime()
method returns true, the 3-argument matches() 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.