类 AbstractAspectJAdvice
- java.lang.Object
- org.springframework.aop.aspectj.AbstractAspectJAdvice
- 所有已实现的接口:
Serializable
,Advice
,AspectJPrecedenceInformation
,Ordered
- 直接已知子类:
AspectJAfterAdvice
,AspectJAfterReturningAdvice
,AspectJAfterThrowingAdvice
,AspectJAroundAdvice
,AspectJMethodBeforeAdvice
public abstract class AbstractAspectJAdvice extends Object implements Advice, AspectJPrecedenceInformation, Serializable
Base class for AOP AllianceAdvice
classes wrapping an AspectJ aspect or an AspectJ-annotated advice method.- 从以下版本开始:
- 2.0
- 作者:
- Rod Johnson, Adrian Colyer, Juergen Hoeller, Ramnivas Laddad
- 另请参阅:
- 序列化表格
字段概要
字段 修饰符和类型 字段 说明 protected Method
aspectJAdviceMethod
protected static String
JOIN_POINT_KEY
Key used in ReflectiveMethodInvocation userAttributes map for the current joinpoint.从接口继承的字段 org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
构造器概要
构造器 构造器 说明 AbstractAspectJAdvice(Method aspectJAdviceMethod, AspectJExpressionPointcut pointcut, AspectInstanceFactory aspectInstanceFactory)
Create a new AbstractAspectJAdvice for the given advice method.
方法概要
所有方法 静态方法 实例方法 具体方法 修饰符和类型 方法 说明 protected 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.Pointcut
buildSafePointcut()
Build a 'safe' pointcut that excludes the AspectJ advice method itself.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.protected ParameterNameDiscoverer
createParameterNameDiscoverer()
Create a ParameterNameDiscoverer to be used for argument binding.static org.aspectj.lang.JoinPoint
currentJoinPoint()
Lazily instantiate joinpoint for the current invocation.ClassLoader
getAspectClassLoader()
Return the ClassLoader for aspect instances.AspectInstanceFactory
getAspectInstanceFactory()
Return the factory for aspect instances.Method
getAspectJAdviceMethod()
Return the AspectJ-style advice method.String
getAspectName()
Return the name of the aspect (bean) in which the advice was declared.int
getDeclarationOrder()
Return the declaration order of the advice member within the aspect.protected Type
getDiscoveredReturningGenericType()
protected Class<?>
getDiscoveredReturningType()
protected Class<?>
getDiscoveredThrowingType()
protected org.aspectj.lang.JoinPoint
getJoinPoint()
Overridden in around advice to return proceeding join point.protected org.aspectj.weaver.tools.JoinPointMatch
getJoinPointMatch()
Get the current join point match at the join point we are being dispatched on.protected org.aspectj.weaver.tools.JoinPointMatch
getJoinPointMatch(ProxyMethodInvocation pmi)
int
getOrder()
Get the order value of this object.AspectJExpressionPointcut
getPointcut()
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
invokeAdviceMethodWithGivenArgs(Object[] args)
void
setArgumentNames(String argNames)
Set by creator of this advice object if the argument names are known.void
setArgumentNamesFromStringArray(String... args)
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
setReturningNameNoCheck(String name)
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
supportsProceedingJoinPoint()
String
toString()
从类继承的方法 java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
从接口继承的方法 org.springframework.aop.aspectj.AspectJPrecedenceInformation
isAfterAdvice, isBeforeAdvice
字段详细资料
JOIN_POINT_KEY
protected static final String JOIN_POINT_KEY
Key used in ReflectiveMethodInvocation userAttributes map for the current joinpoint.
aspectJAdviceMethod
protected transient Method aspectJAdviceMethod
构造器详细资料
AbstractAspectJAdvice
public AbstractAspectJAdvice(Method aspectJAdviceMethod, AspectJExpressionPointcut pointcut, AspectInstanceFactory aspectInstanceFactory)
Create a new AbstractAspectJAdvice for the given advice method.- 参数:
aspectJAdviceMethod
- the AspectJ-style advice methodpointcut
- the AspectJ expression pointcutaspectInstanceFactory
- the factory for aspect instances
方法详细资料
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).
- 返回:
- current AspectJ joinpoint, or through an exception if we're not in a Spring AOP invocation.
getAspectJAdviceMethod
public final Method getAspectJAdviceMethod()
Return the AspectJ-style advice method.
getPointcut
public final AspectJExpressionPointcut getPointcut()
Return the AspectJ expression pointcut.
buildSafePointcut
public final Pointcut buildSafePointcut()
Build a 'safe' pointcut that excludes the AspectJ advice method itself.- 返回:
- a composable pointcut that builds on the original AspectJ expression pointcut
- 另请参阅:
getPointcut()
getAspectInstanceFactory
public final AspectInstanceFactory getAspectInstanceFactory()
Return the factory for aspect instances.
getAspectClassLoader
@Nullable public final ClassLoader getAspectClassLoader()
Return the ClassLoader for aspect instances.
getOrder
public int getOrder()
从接口复制的说明:Ordered
Get the order value of this object.Higher values are interpreted as lower priority. As a consequence, the object with the lowest value has the highest priority (somewhat analogous to Servlet
load-on-startup
values).Same order values will result in arbitrary sort positions for the affected objects.
- 指定者:
getOrder
在接口中Ordered
- 返回:
- the order value
- 另请参阅:
Ordered.HIGHEST_PRECEDENCE
,Ordered.LOWEST_PRECEDENCE
setAspectName
public void setAspectName(String name)
Set the name of the aspect (bean) in which the advice was declared.
getAspectName
public String getAspectName()
从接口复制的说明:AspectJPrecedenceInformation
Return the name of the aspect (bean) in which the advice was declared.
setDeclarationOrder
public void setDeclarationOrder(int order)
Set the declaration order of this advice within the aspect.
getDeclarationOrder
public int getDeclarationOrder()
从接口复制的说明:AspectJPrecedenceInformation
Return the declaration order of the advice member within the aspect.
setArgumentNames
public void setArgumentNames(String argNames)
Set by 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.
- 参数:
argNames
- comma delimited list of arg names
setArgumentNamesFromStringArray
public void setArgumentNamesFromStringArray(String... args)
setReturningName
public void setReturningName(String name)
setReturningNameNoCheck
protected void setReturningNameNoCheck(String name)
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
protected Class<?> getDiscoveredReturningType()
getDiscoveredReturningGenericType
@Nullable protected Type getDiscoveredReturningGenericType()
setThrowingName
public void setThrowingName(String name)
setThrowingNameNoCheck
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.
getDiscoveredThrowingType
protected Class<?> 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 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.- 参数:
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)- 返回:
- 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.- 参数:
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)- 返回:
- the invocation result
- 抛出:
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
- 抛出:
Throwable
invokeAdviceMethodWithGivenArgs
protected Object invokeAdviceMethodWithGivenArgs(Object[] args) throws Throwable
- 抛出:
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)