类 ReflectiveMethodInvocation
- java.lang.Object
- org.springframework.aop.framework.ReflectiveMethodInvocation
- 所有已实现的接口:
Cloneable
,Invocation
,Joinpoint
,MethodInvocation
,ProxyMethodInvocation
public class ReflectiveMethodInvocation extends Object implements ProxyMethodInvocation, Cloneable
Spring's implementation of the AOP AllianceMethodInvocation
interface, implementing the extendedProxyMethodInvocation
interface.Invokes the target object using reflection. Subclasses can override the
invokeJoinpoint()
method to change this behavior, so this is also a useful base class for more specialized MethodInvocation implementations.It is possible to clone an invocation, to invoke
proceed()
repeatedly (once per clone), using theinvocableClone()
method. It is also possible to attach custom attributes to the invocation, using thesetUserAttribute(java.lang.String, java.lang.Object)
/getUserAttribute(java.lang.String)
methods.NOTE: This class is considered internal and should not be directly accessed. The sole reason for it being public is compatibility with existing framework integrations (e.g. Pitchfork). For any other purposes, use the
ProxyMethodInvocation
interface instead.- 作者:
- Rod Johnson, Juergen Hoeller, Adrian Colyer
- 另请参阅:
invokeJoinpoint()
,proceed()
,invocableClone()
,setUserAttribute(java.lang.String, java.lang.Object)
,getUserAttribute(java.lang.String)
方法概要
所有方法 实例方法 具体方法 修饰符和类型 方法 说明 Object[]
getArguments()
Get the arguments as an array object.Method
getMethod()
Return the method invoked on the proxied interface.Object
getProxy()
Return the proxy that this method invocation was made through.AccessibleObject
getStaticPart()
Return the static part of this joinpoint.Object
getThis()
Return the object that holds the current joinpoint's static part.Object
getUserAttribute(String key)
Return the value of the specified user attribute.Map<String,Object>
getUserAttributes()
Return user attributes associated with this invocation.MethodInvocation
invocableClone()
This implementation returns a shallow copy of this invocation object, including an independent copy of the original arguments array.MethodInvocation
invocableClone(Object... arguments)
This implementation returns a shallow copy of this invocation object, using the given arguments array for the clone.protected Object
invokeJoinpoint()
Invoke the joinpoint using reflection.Object
proceed()
Proceed to the next interceptor in the chain.void
setArguments(Object... arguments)
Set the arguments to be used on subsequent invocations in the any advice in this chain.void
setUserAttribute(String key, Object value)
Add the specified user attribute with the given value to this invocation.String
toString()
字段详细资料
interceptorsAndDynamicMethodMatchers
protected final List<?> interceptorsAndDynamicMethodMatchers
List of MethodInterceptor and InterceptorAndDynamicMethodMatcher that need dynamic checks.
构造器详细资料
ReflectiveMethodInvocation
protected ReflectiveMethodInvocation(Object proxy, @Nullable Object target, Method method, @Nullable Object[] arguments, @Nullable Class<?> targetClass, List<Object> interceptorsAndDynamicMethodMatchers)
Construct a new ReflectiveMethodInvocation with the given arguments.- 参数:
proxy
- the proxy object that the invocation was made ontarget
- the target object to invokemethod
- the method to invokearguments
- the arguments to invoke the method withtargetClass
- the target class, for MethodMatcher invocationsinterceptorsAndDynamicMethodMatchers
- interceptors that should be applied, along with any InterceptorAndDynamicMethodMatchers that need evaluation at runtime. MethodMatchers included in this struct must already have been found to have matched as far as was possibly statically. Passing an array might be about 10% faster, but would complicate the code. And it would work only for static pointcuts.
方法详细资料
getProxy
public final Object getProxy()
从接口复制的说明:ProxyMethodInvocation
Return the proxy that this method invocation was made through.- 指定者:
getProxy
在接口中ProxyMethodInvocation
- 返回:
- the original proxy object
getThis
@Nullable public final Object getThis()
从接口复制的说明:Joinpoint
Return the object that holds the current joinpoint's static part.For instance, the target object for an invocation.
getStaticPart
public final AccessibleObject getStaticPart()
从接口复制的说明:Joinpoint
Return the static part of this joinpoint.The static part is an accessible object on which a chain of interceptors are installed.
- 指定者:
getStaticPart
在接口中Joinpoint
getMethod
public final Method getMethod()
Return the method invoked on the proxied interface. May or may not correspond with a method invoked on an underlying implementation of that interface.- 指定者:
getMethod
在接口中MethodInvocation
- 返回:
- the method being called
getArguments
public final Object[] getArguments()
从接口复制的说明:Invocation
Get the arguments as an array object. It is possible to change element values within this array to change the arguments.- 指定者:
getArguments
在接口中Invocation
- 返回:
- the argument of the invocation
setArguments
public void setArguments(Object... arguments)
从接口复制的说明:ProxyMethodInvocation
Set the arguments to be used on subsequent invocations in the any advice in this chain.- 指定者:
setArguments
在接口中ProxyMethodInvocation
- 参数:
arguments
- the argument array
proceed
@Nullable public Object proceed() throws Throwable
从接口复制的说明:Joinpoint
Proceed to the next interceptor in the chain.The implementation and the semantics of this method depends on the actual joinpoint type (see the children interfaces).
invokeJoinpoint
@Nullable protected Object invokeJoinpoint() throws Throwable
Invoke the joinpoint using reflection. Subclasses can override this to use custom invocation.- 返回:
- the return value of the joinpoint
- 抛出:
Throwable
- if invoking the joinpoint resulted in an exception
invocableClone
public MethodInvocation invocableClone()
This implementation returns a shallow copy of this invocation object, including an independent copy of the original arguments array.We want a shallow copy in this case: We want to use the same interceptor chain and other object references, but we want an independent value for the current interceptor index.
- 指定者:
invocableClone
在接口中ProxyMethodInvocation
- 返回:
- an invocable clone of this invocation.
proceed()
can be called once per clone. - 另请参阅:
Object.clone()
invocableClone
public MethodInvocation invocableClone(Object... arguments)
This implementation returns a shallow copy of this invocation object, using the given arguments array for the clone.We want a shallow copy in this case: We want to use the same interceptor chain and other object references, but we want an independent value for the current interceptor index.
- 指定者:
invocableClone
在接口中ProxyMethodInvocation
- 参数:
arguments
- the arguments that the cloned invocation is supposed to use, overriding the original arguments- 返回:
- an invocable clone of this invocation.
proceed()
can be called once per clone. - 另请参阅:
Object.clone()
setUserAttribute
public void setUserAttribute(String key, @Nullable Object value)
从接口复制的说明:ProxyMethodInvocation
Add the specified user attribute with the given value to this invocation.Such attributes are not used within the AOP framework itself. They are just kept as part of the invocation object, for use in special interceptors.
- 指定者:
setUserAttribute
在接口中ProxyMethodInvocation
- 参数:
key
- the name of the attributevalue
- the value of the attribute, ornull
to reset it
getUserAttribute
@Nullable public Object getUserAttribute(String key)
从接口复制的说明:ProxyMethodInvocation
Return the value of the specified user attribute.- 指定者:
getUserAttribute
在接口中ProxyMethodInvocation
- 参数:
key
- the name of the attribute- 返回:
- the value of the attribute, or
null
if not set - 另请参阅:
ProxyMethodInvocation.setUserAttribute(java.lang.String, java.lang.Object)
getUserAttributes
public Map<String,Object> getUserAttributes()
Return user attributes associated with this invocation. This method provides an invocation-bound alternative to a ThreadLocal.This map is initialized lazily and is not used in the AOP framework itself.
- 返回:
- any user attributes associated with this invocation (never
null
)