|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectorg.springframework.aop.support.AbstractExpressionPointcut
org.springframework.aop.aspectj.AspectJExpressionPointcut
public class AspectJExpressionPointcut
Spring Pointcut implementation
that uses the AspectJ weaver to evaluate a pointcut expression.
The pointcut expression value is an AspectJ expression. This can reference other pointcuts and use composition and other operations.
Naturally, as this is to be processed by Spring AOP's proxy-based model, only method execution pointcuts are supported.
| Nested Class Summary | |
|---|---|
private class |
AspectJExpressionPointcut.BeanNameContextMatcher
Matcher class for the BeanNamePointcutDesignatorHandler. |
private class |
AspectJExpressionPointcut.BeanNamePointcutDesignatorHandler
Handler for the Spring-specific bean() pointcut designator
extension to AspectJ. |
| Field Summary | |
|---|---|
private BeanFactory |
beanFactory
|
private static Log |
logger
|
private java.lang.Class |
pointcutDeclarationScope
|
private PointcutExpression |
pointcutExpression
|
private java.lang.String[] |
pointcutParameterNames
|
private java.lang.Class[] |
pointcutParameterTypes
|
private java.util.Map<java.lang.reflect.Method,ShadowMatch> |
shadowMatchCache
|
private static java.util.Set<PointcutPrimitive> |
SUPPORTED_PRIMITIVES
|
| Fields inherited from interface org.springframework.aop.ClassFilter |
|---|
TRUE |
| Fields inherited from interface org.springframework.aop.Pointcut |
|---|
TRUE |
| Constructor Summary | |
|---|---|
AspectJExpressionPointcut()
Create a new default AspectJExpressionPointcut. |
|
AspectJExpressionPointcut(java.lang.Class declarationScope,
java.lang.String[] paramNames,
java.lang.Class[] paramTypes)
Create a new AspectJExpressionPointcut with the given settings. |
|
| Method Summary | |
|---|---|
private void |
bindParameters(ProxyMethodInvocation invocation,
JoinPointMatch jpm)
|
private PointcutExpression |
buildPointcutExpression()
Build the underlying AspectJ pointcut expression. |
private void |
checkReadyToMatch()
Check whether this pointcut is ready to match, lazily building the underlying AspectJ pointcut expression. |
boolean |
equals(java.lang.Object other)
|
ClassFilter |
getClassFilter()
Return the ClassFilter for this pointcut. |
protected java.lang.String |
getCurrentProxiedBeanName()
|
MethodMatcher |
getMethodMatcher()
Return the MethodMatcher for this pointcut. |
PointcutExpression |
getPointcutExpression()
Return the underlying AspectJ pointcut expression. |
private ShadowMatch |
getShadowMatch(java.lang.reflect.Method targetMethod,
java.lang.reflect.Method originalMethod)
|
int |
hashCode()
|
private PointcutParser |
initializePointcutParser()
Initialize the underlying AspectJ pointcut parser. |
boolean |
isRuntime()
Is this MethodMatcher dynamic, that is, must a final call be made on the MethodMatcher.matches(java.lang.reflect.Method, Class, Object[]) method at
runtime even if the 2-arg matches method returns true? |
boolean |
matches(java.lang.Class targetClass)
Should the pointcut apply to the given interface or target class? |
boolean |
matches(java.lang.reflect.Method method,
java.lang.Class targetClass)
Perform static checking whether the given method matches. |
boolean |
matches(java.lang.reflect.Method method,
java.lang.Class targetClass,
boolean beanHasIntroductions)
Perform static checking whether the given method matches. |
boolean |
matches(java.lang.reflect.Method method,
java.lang.Class targetClass,
java.lang.Object[] args)
Check whether there a runtime (dynamic) match for this method, which must have matched statically. |
private boolean |
matchesIgnoringSubtypes(ShadowMatch shadowMatch)
A match test returned maybe - if there are any subtype sensitive variables involved in the test (this, target, at_this, at_target, at_annotation) then we say this is not a match as in Spring there will never be a different runtime subtype. |
private boolean |
matchesTarget(ShadowMatch shadowMatch,
java.lang.Class targetClass)
|
private void |
readObject(java.io.ObjectInputStream ois)
|
private java.lang.String |
replaceBooleanOperators(java.lang.String pcExpr)
If a pointcut expression has been specified in XML, the user cannot write and as "&&" (though && will work). |
void |
setBeanFactory(BeanFactory beanFactory)
Callback that supplies the owning factory to a bean instance. |
void |
setParameterNames(java.lang.String[] names)
Set the parameter names for the pointcut. |
void |
setParameterTypes(java.lang.Class[] types)
Set the parameter types for the pointcut. |
void |
setPointcutDeclarationScope(java.lang.Class pointcutDeclarationScope)
Set the declaration scope for the pointcut. |
java.lang.String |
toString()
|
| Methods inherited from class org.springframework.aop.support.AbstractExpressionPointcut |
|---|
getExpression, getLocation, onSetExpression, setExpression, setLocation |
| Methods inherited from class java.lang.Object |
|---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
| Field Detail |
|---|
private static final java.util.Set<PointcutPrimitive> SUPPORTED_PRIMITIVES
private static final Log logger
private java.lang.Class pointcutDeclarationScope
private java.lang.String[] pointcutParameterNames
private java.lang.Class[] pointcutParameterTypes
private BeanFactory beanFactory
private transient PointcutExpression pointcutExpression
private transient java.util.Map<java.lang.reflect.Method,ShadowMatch> shadowMatchCache
| Constructor Detail |
|---|
public AspectJExpressionPointcut()
public AspectJExpressionPointcut(java.lang.Class declarationScope,
java.lang.String[] paramNames,
java.lang.Class[] paramTypes)
declarationScope - the declaration scope for the pointcutparamNames - the parameter names for the pointcutparamTypes - the parameter types for the pointcut| Method Detail |
|---|
public void setPointcutDeclarationScope(java.lang.Class pointcutDeclarationScope)
public void setParameterNames(java.lang.String[] names)
public void setParameterTypes(java.lang.Class[] types)
public void setBeanFactory(BeanFactory beanFactory)
BeanFactoryAwareInvoked after the population of normal bean properties
but before an initialization callback such as
InitializingBean.afterPropertiesSet() or a custom init-method.
setBeanFactory in interface BeanFactoryAwarebeanFactory - owning BeanFactory (never null).
The bean can immediately call methods on the factory.BeanInitializationExceptionpublic ClassFilter getClassFilter()
Pointcut
getClassFilter in interface Pointcutnull)public MethodMatcher getMethodMatcher()
Pointcut
getMethodMatcher in interface Pointcutnull)private void checkReadyToMatch()
private PointcutExpression buildPointcutExpression()
private PointcutParser initializePointcutParser()
private java.lang.String replaceBooleanOperators(java.lang.String pcExpr)
and as "&&" (though && will work).
We also allow and between two pointcut sub-expressions.
This method converts back to && for the AspectJ pointcut parser.
public PointcutExpression getPointcutExpression()
public boolean matches(java.lang.Class targetClass)
ClassFilter
matches in interface ClassFiltertargetClass - the candidate target class
public boolean matches(java.lang.reflect.Method method,
java.lang.Class targetClass,
boolean beanHasIntroductions)
IntroductionAwareMethodMatcherMethodMatcher.matches(java.lang.reflect.Method, Class) method
if the caller supports the extended IntroductionAwareMethodMatcher interface.
matches in interface IntroductionAwareMethodMatchermethod - the candidate methodtargetClass - the target class (may be null, in which case
the candidate class must be taken to be the method's declaring class)beanHasIntroductions - true if the object on whose behalf we are
asking is the subject on one or more introductions; false otherwise
public boolean matches(java.lang.reflect.Method method,
java.lang.Class targetClass)
MethodMatcherfalse or if the MethodMatcher.isRuntime() method
returns false, no runtime check (i.e. no.
MethodMatcher.matches(java.lang.reflect.Method, Class, Object[]) call) will be made.
matches in interface MethodMatchermethod - the candidate methodtargetClass - the target class (may be null, in which case
the candidate class must be taken to be the method's declaring class)
public boolean isRuntime()
MethodMatcherMethodMatcher.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,
isRuntime in interface MethodMatcherMethodMatcher.matches(java.lang.reflect.Method, Class, Object[]) method
is required if static matching passed
public boolean matches(java.lang.reflect.Method method,
java.lang.Class targetClass,
java.lang.Object[] args)
MethodMatcherThis method is invoked only if the 2-arg matches method returns
true for the given method and target class, and if the
MethodMatcher.isRuntime() method returns true. Invoked
immediately before potential running of the advice, after any
advice earlier in the advice chain has run.
matches in interface MethodMatchermethod - the candidate methodtargetClass - 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
MethodMatcher.matches(Method, Class)protected java.lang.String getCurrentProxiedBeanName()
private boolean matchesIgnoringSubtypes(ShadowMatch shadowMatch)
private boolean matchesTarget(ShadowMatch shadowMatch,
java.lang.Class targetClass)
private void bindParameters(ProxyMethodInvocation invocation,
JoinPointMatch jpm)
private ShadowMatch getShadowMatch(java.lang.reflect.Method targetMethod,
java.lang.reflect.Method originalMethod)
public boolean equals(java.lang.Object other)
equals in class java.lang.Objectpublic int hashCode()
hashCode in class java.lang.Objectpublic java.lang.String toString()
toString in class java.lang.Object
private void readObject(java.io.ObjectInputStream ois)
throws java.io.IOException,
java.lang.ClassNotFoundException
java.io.IOException
java.lang.ClassNotFoundException
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||