Class AbstractAspectJAdvice
- All Implemented Interfaces:
Serializable
,Advice
,AspectJPrecedenceInformation
,org.springframework.core.Ordered
- Direct Known Subclasses:
AspectJAfterAdvice
,AspectJAfterReturningAdvice
,AspectJAfterThrowingAdvice
,AspectJAroundAdvice
,AspectJMethodBeforeAdvice
Advice
classes
wrapping an AspectJ aspect or an AspectJ-annotated advice method.- Since:
- 2.0
- Author:
- Rod Johnson, Adrian Colyer, Juergen Hoeller, Ramnivas Laddad
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionprotected Method
protected static final String
Key used in ReflectiveMethodInvocation userAttributes map for the current joinpoint.Fields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
-
Constructor Summary
ConstructorDescriptionAbstractAspectJAdvice
(Method aspectJAdviceMethod, AspectJExpressionPointcut pointcut, AspectInstanceFactory aspectInstanceFactory) Create a new AbstractAspectJAdvice for the given advice method. -
Method Summary
Modifier and TypeMethodDescriptionprotected Object[]
argBinding
(org.aspectj.lang.JoinPoint jp, org.aspectj.weaver.tools.JoinPointMatch jpMatch, Object returnValue, Throwable ex) Take the arguments at the method execution join point and output a set of arguments to the advice method.final Pointcut
Build a 'safe' pointcut that excludes the AspectJ advice method itself.final void
Do as much work as we can as part of the set-up so that argument binding on subsequent advice invocations can be as fast as possible.protected org.springframework.core.ParameterNameDiscoverer
Create a ParameterNameDiscoverer to be used for argument binding.static org.aspectj.lang.JoinPoint
Lazily instantiate joinpoint for the current invocation.final ClassLoader
Return the ClassLoader for aspect instances.final AspectInstanceFactory
Return the factory for aspect instances.final Method
Return the AspectJ-style advice method.Return the name of the aspect (bean) in which the advice was declared.int
Return the declaration order of the advice member within the aspect.protected Type
protected Class<?>
protected Class<?>
protected org.aspectj.lang.JoinPoint
Overridden in around advice to return proceeding join point.protected org.aspectj.weaver.tools.JoinPointMatch
Get the current join point match at the join point we are being dispatched on.protected org.aspectj.weaver.tools.JoinPointMatch
int
getOrder()
Return the AspectJ expression pointcut.protected Object
invokeAdviceMethod
(org.aspectj.lang.JoinPoint jp, org.aspectj.weaver.tools.JoinPointMatch jpMatch, Object returnValue, Throwable t) protected Object
invokeAdviceMethod
(org.aspectj.weaver.tools.JoinPointMatch jpMatch, Object returnValue, Throwable ex) Invoke the advice method.protected Object
void
setArgumentNames
(String argumentNames) Set by the creator of this advice object if the argument names are known.void
setArgumentNamesFromStringArray
(String... argumentNames) Set by the creator of this advice object if the argument names are known.void
setAspectName
(String name) Set the name of the aspect (bean) in which the advice was declared.void
setDeclarationOrder
(int order) Set the declaration order of this advice within the aspect.void
setReturningName
(String name) protected void
We need to hold the returning name at this level for argument binding calculations, this method allows the afterReturning advice subclass to set the name.void
setThrowingName
(String name) protected void
setThrowingNameNoCheck
(String name) We need to hold the throwing name at this level for argument binding calculations, this method allows the afterThrowing advice subclass to set the name.protected boolean
toString()
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.springframework.aop.aspectj.AspectJPrecedenceInformation
isAfterAdvice, isBeforeAdvice
-
Field Details
-
JOIN_POINT_KEY
Key used in ReflectiveMethodInvocation userAttributes map for the current joinpoint. -
aspectJAdviceMethod
-
-
Constructor Details
-
AbstractAspectJAdvice
public AbstractAspectJAdvice(Method aspectJAdviceMethod, AspectJExpressionPointcut pointcut, AspectInstanceFactory aspectInstanceFactory) Create a new AbstractAspectJAdvice for the given advice method.- Parameters:
aspectJAdviceMethod
- the AspectJ-style advice methodpointcut
- the AspectJ expression pointcutaspectInstanceFactory
- the factory for aspect instances
-
-
Method Details
-
currentJoinPoint
public static org.aspectj.lang.JoinPoint currentJoinPoint()Lazily instantiate joinpoint for the current invocation. Requires MethodInvocation to be bound with ExposeInvocationInterceptor.Do not use if access is available to the current ReflectiveMethodInvocation (in an around advice).
- Returns:
- current AspectJ joinpoint, or through an exception if we're not in a Spring AOP invocation.
-
getAspectJAdviceMethod
Return the AspectJ-style advice method. -
getPointcut
Return the AspectJ expression pointcut. -
buildSafePointcut
Build a 'safe' pointcut that excludes the AspectJ advice method itself.- Returns:
- a composable pointcut that builds on the original AspectJ expression pointcut
- See Also:
-
getAspectInstanceFactory
Return the factory for aspect instances. -
getAspectClassLoader
Return the ClassLoader for aspect instances. -
getOrder
public int getOrder()- Specified by:
getOrder
in interfaceorg.springframework.core.Ordered
-
setAspectName
Set the name of the aspect (bean) in which the advice was declared. -
getAspectName
Description copied from interface:AspectJPrecedenceInformation
Return the name of the aspect (bean) in which the advice was declared.- Specified by:
getAspectName
in interfaceAspectJPrecedenceInformation
-
setDeclarationOrder
public void setDeclarationOrder(int order) Set the declaration order of this advice within the aspect. -
getDeclarationOrder
public int getDeclarationOrder()Description copied from interface:AspectJPrecedenceInformation
Return the declaration order of the advice member within the aspect.- Specified by:
getDeclarationOrder
in interfaceAspectJPrecedenceInformation
-
setArgumentNames
Set by the creator of this advice object if the argument names are known.This could be for example because they have been explicitly specified in XML or in an advice annotation.
- Parameters:
argumentNames
- comma delimited list of argument names
-
setArgumentNamesFromStringArray
Set by the creator of this advice object if the argument names are known.This could be for example because they have been explicitly specified in XML or in an advice annotation.
- Parameters:
argumentNames
- list of argument names
-
setReturningName
-
setReturningNameNoCheck
We need to hold the returning name at this level for argument binding calculations, this method allows the afterReturning advice subclass to set the name. -
getDiscoveredReturningType
-
getDiscoveredReturningGenericType
-
setThrowingName
-
setThrowingNameNoCheck
We need to hold the throwing name at this level for argument binding calculations, this method allows the afterThrowing advice subclass to set the name. -
getDiscoveredThrowingType
-
calculateArgumentBindings
public final void calculateArgumentBindings()Do as much work as we can as part of the set-up so that argument binding on subsequent advice invocations can be as fast as possible.If the first argument is of type JoinPoint or ProceedingJoinPoint then we pass a JoinPoint in that position (ProceedingJoinPoint for around advice).
If the first argument is of type
JoinPoint.StaticPart
then we pass aJoinPoint.StaticPart
in that position.Remaining arguments have to be bound by pointcut evaluation at a given join point. We will get back a map from argument name to value. We need to calculate which advice parameter needs to be bound to which argument name. There are multiple strategies for determining this binding, which are arranged in a ChainOfResponsibility.
-
supportsProceedingJoinPoint
protected boolean supportsProceedingJoinPoint() -
createParameterNameDiscoverer
protected org.springframework.core.ParameterNameDiscoverer createParameterNameDiscoverer()Create a ParameterNameDiscoverer to be used for argument binding.The default implementation creates a
DefaultParameterNameDiscoverer
and adds a specifically configuredAspectJAdviceParameterNameDiscoverer
. -
argBinding
protected Object[] argBinding(org.aspectj.lang.JoinPoint jp, @Nullable org.aspectj.weaver.tools.JoinPointMatch jpMatch, @Nullable Object returnValue, @Nullable Throwable ex) Take the arguments at the method execution join point and output a set of arguments to the advice method.- Parameters:
jp
- the current JoinPointjpMatch
- the join point match that matched this execution join pointreturnValue
- the return value from the method execution (may be null)ex
- the exception thrown by the method execution (may be null)- Returns:
- the empty array if there are no arguments
-
invokeAdviceMethod
protected Object invokeAdviceMethod(@Nullable org.aspectj.weaver.tools.JoinPointMatch jpMatch, @Nullable Object returnValue, @Nullable Throwable ex) throws Throwable Invoke the advice method.- Parameters:
jpMatch
- the JoinPointMatch that matched this execution join pointreturnValue
- the return value from the method execution (may be null)ex
- the exception thrown by the method execution (may be null)- Returns:
- the invocation result
- Throws:
Throwable
- in case of invocation failure
-
invokeAdviceMethod
protected Object invokeAdviceMethod(org.aspectj.lang.JoinPoint jp, @Nullable org.aspectj.weaver.tools.JoinPointMatch jpMatch, @Nullable Object returnValue, @Nullable Throwable t) throws Throwable - Throws:
Throwable
-
invokeAdviceMethodWithGivenArgs
- Throws:
Throwable
-
getJoinPoint
protected org.aspectj.lang.JoinPoint getJoinPoint()Overridden in around advice to return proceeding join point. -
getJoinPointMatch
@Nullable protected org.aspectj.weaver.tools.JoinPointMatch getJoinPointMatch()Get the current join point match at the join point we are being dispatched on. -
getJoinPointMatch
@Nullable protected org.aspectj.weaver.tools.JoinPointMatch getJoinPointMatch(ProxyMethodInvocation pmi) -
toString
-