org.springframework.aop
Interface MethodMatcher

All Known Implementing Classes:
ControlFlowPointcut, DynamicMethodMatcher, StaticMethodMatcher

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 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.

Since:
11-Nov-2003
Version:
$Id: MethodMatcher.java,v 1.5 2004/03/18 02:46:07 trisberg Exp $
Author:
Rod Johnson

Field Summary
static MethodMatcher TRUE
          Canonical instance that matches all methods.
 
Method Summary
 boolean isRuntime()
          Is this MethodMatcher dynamic?
 boolean matches(java.lang.reflect.Method m, java.lang.Class targetClass)
          Perform static checking.
 boolean matches(java.lang.reflect.Method m, java.lang.Class targetClass, java.lang.Object[] args)
          Is there a runtime (dynamic) match for this method, which must have matched statically.
 

Field Detail

TRUE

public static final MethodMatcher TRUE
Canonical instance that matches all methods.

Method Detail

matches

public boolean matches(java.lang.reflect.Method m,
                       java.lang.Class targetClass)
Perform static checking. If this returns false, or if the isRuntime() method returns false, no runtime check will be made.

Parameters:
m - candidate method
targetClass - target class (may be null, in which case the candidate class must be taken to be the method's declaring class)
Returns:
whether or not this method matches statically

isRuntime

public boolean isRuntime()
Is this MethodMatcher dynamic? Must a final call be made on the matches(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,

Note: Could be pulled up into a Matcher super-interface to apply to fields also.

Returns:
whether or not a runtime matche via the 3-arg matches() method is required if static matching passed.

matches

public boolean matches(java.lang.reflect.Method m,
                       java.lang.Class targetClass,
                       java.lang.Object[] args)
Is 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 potentially running of the advice, after any advice earlier in the advice chain has run.

Parameters:
m - candidate method
targetClass - target class
args - arguments to the method
Returns:
whether there's a runtime match
See Also:
matches(Method, Class)


Copyright (C) 2003-2004 The Spring Framework Project.