Class ControlFlowPointcut
- All Implemented Interfaces:
Serializable
,ClassFilter
,MethodMatcher
,Pointcut
Each configured method name pattern can be an exact method name or a
pattern (see isMatch(String, String)
for details on the supported
pattern styles).
Note that evaluating such pointcuts is 10-15 times slower than evaluating normal pointcuts, but they are useful in some cases.
- Author:
- Rod Johnson, Rob Harrop, Juergen Hoeller, Sam Brannen
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionprotected final Class<?>
The class against which to match.An immutable list of distinct method name patterns against which to match.Fields inherited from interface org.springframework.aop.ClassFilter
TRUE
Fields inherited from interface org.springframework.aop.MethodMatcher
TRUE
-
Constructor Summary
ConstructorDescriptionControlFlowPointcut
(Class<?> clazz) Construct a new pointcut that matches all control flows below the given class.ControlFlowPointcut
(Class<?> clazz, @Nullable String methodNamePattern) Construct a new pointcut that matches all calls below a method matching the given method name pattern in the given class.ControlFlowPointcut
(Class<?> clazz, String... methodNamePatterns) Construct a new pointcut that matches all calls below a method matching one of the given method name patterns in the given class.ControlFlowPointcut
(Class<?> clazz, List<String> methodNamePatterns) Construct a new pointcut that matches all calls below a method matching one of the given method name patterns in the given class. -
Method Summary
Modifier and TypeMethodDescriptionboolean
Return the ClassFilter for this pointcut.int
Get the number of timesmatches(Method, Class, Object...)
has been evaluated.Return the MethodMatcher for this pointcut.int
hashCode()
protected final void
Increment theevaluation count
.protected boolean
Determine if the given method name matches the method name pattern at the specified index.protected boolean
Determine if the given method name matches the method name pattern.boolean
Is thisMethodMatcher
dynamic, that is, must a final check be made via theMethodMatcher.matches(Method, Class, Object[])
method at runtime even ifMethodMatcher.matches(Method, Class)
returnstrue
?boolean
Subclasses can override this for greater filtering (and performance).boolean
Subclasses can override this if it's possible to filter out some candidate classes.boolean
Check whether there is a runtime (dynamic) match for this method, which must have matched statically.toString()
-
Field Details
-
clazz
The class against which to match.- Since:
- 6.1
-
methodNamePatterns
An immutable list of distinct method name patterns against which to match.- Since:
- 6.1
-
-
Constructor Details
-
ControlFlowPointcut
Construct a new pointcut that matches all control flows below the given class.- Parameters:
clazz
- the class
-
ControlFlowPointcut
Construct a new pointcut that matches all calls below a method matching the given method name pattern in the given class.If no method name pattern is given, the pointcut matches all control flows below the given class.
- Parameters:
clazz
- the classmethodNamePattern
- the method name pattern (may benull
)
-
ControlFlowPointcut
Construct a new pointcut that matches all calls below a method matching one of the given method name patterns in the given class.If no method name pattern is given, the pointcut matches all control flows below the given class.
- Parameters:
clazz
- the classmethodNamePatterns
- the method name patterns (potentially empty)- Since:
- 6.1
-
ControlFlowPointcut
Construct a new pointcut that matches all calls below a method matching one of the given method name patterns in the given class.If no method name pattern is given, the pointcut matches all control flows below the given class.
- Parameters:
clazz
- the classmethodNamePatterns
- the method name patterns (potentially empty)- Since:
- 6.1
-
-
Method Details
-
matches
Subclasses can override this for greater filtering (and performance).The default implementation always returns
true
.- Specified by:
matches
in interfaceClassFilter
- Parameters:
clazz
- the candidate target class- Returns:
- whether the advice should apply to the given target class
-
matches
Subclasses can override this if it's possible to filter out some candidate classes.The default implementation always returns
true
.- Specified by:
matches
in interfaceMethodMatcher
- Parameters:
method
- the candidate methodtargetClass
- the target class- Returns:
- whether this method matches statically
-
isRuntime
public boolean isRuntime()Description copied from interface:MethodMatcher
Is thisMethodMatcher
dynamic, that is, must a final check be made via theMethodMatcher.matches(Method, Class, Object[])
method at runtime even ifMethodMatcher.matches(Method, Class)
returnstrue
?Can be invoked when an AOP proxy is created, and need not be invoked again before each method invocation.
- Specified by:
isRuntime
in interfaceMethodMatcher
- Returns:
- whether a runtime match via
MethodMatcher.matches(Method, Class, Object[])
is required if static matching passed
-
matches
Description copied from interface:MethodMatcher
Check whether there is a runtime (dynamic) match for this method, which must have matched statically.This method is invoked only if
MethodMatcher.matches(Method, Class)
returnstrue
for the given method and target class, and ifMethodMatcher.isRuntime()
returnstrue
.Invoked immediately before potential running of the advice, after any advice earlier in the advice chain has run.
- Specified by:
matches
in interfaceMethodMatcher
- Parameters:
method
- the candidate methodtargetClass
- the target classargs
- arguments to the method- Returns:
- whether there's a runtime match
- See Also:
-
getEvaluations
public int getEvaluations()Get the number of timesmatches(Method, Class, Object...)
has been evaluated.Useful for optimization and testing purposes.
-
incrementEvaluationCount
protected final void incrementEvaluationCount()Increment theevaluation count
.- Since:
- 6.1
- See Also:
-
isMatch
Determine if the given method name matches the method name pattern at the specified index.This method is invoked by
matches(Method, Class, Object...)
.The default implementation retrieves the method name pattern from
methodNamePatterns
and delegates toisMatch(String, String)
.Can be overridden in subclasses — for example, to support regular expressions.
- Parameters:
methodName
- the method name to checkpatternIndex
- the index of the method name pattern- Returns:
true
if the method name matches the pattern at the specified index- Since:
- 6.1
- See Also:
-
isMatch
Determine if the given method name matches the method name pattern.This method is invoked by
isMatch(String, int)
.The default implementation checks for direct equality as well as
xxx*
,*xxx
,*xxx*
, andxxx*yyy
matches.Can be overridden in subclasses — for example, to support a different style of simple pattern matching.
- Parameters:
methodName
- the method name to checkmethodNamePattern
- the method name pattern- Returns:
true
if the method name matches the pattern- Since:
- 6.1
- See Also:
-
getClassFilter
Description copied from interface:Pointcut
Return the ClassFilter for this pointcut.- Specified by:
getClassFilter
in interfacePointcut
- Returns:
- the ClassFilter (never
null
)
-
getMethodMatcher
Description copied from interface:Pointcut
Return the MethodMatcher for this pointcut.- Specified by:
getMethodMatcher
in interfacePointcut
- Returns:
- the MethodMatcher (never
null
)
-
equals
-
hashCode
public int hashCode() -
toString
-