public class ReflectiveMethodInvocation extends Object implements ProxyMethodInvocation, Cloneable
MethodInvocation interface,
implementing the extended
ProxyMethodInvocation 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 the invocableClone() method.
It is also possible to attach custom attributes to the invocation,
using the setUserAttribute(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.
invokeJoinpoint(),
proceed(),
invocableClone(),
setUserAttribute(java.lang.String, java.lang.Object),
getUserAttribute(java.lang.String)| 限定符和类型 | 字段和说明 |
|---|---|
protected Object[] |
arguments |
protected List<?> |
interceptorsAndDynamicMethodMatchers
List of MethodInterceptor and InterceptorAndDynamicMethodMatcher
that need dynamic checks.
|
protected Method |
method |
protected Object |
proxy |
protected Object |
target |
| 限定符 | 构造器和说明 |
|---|---|
protected |
ReflectiveMethodInvocation(Object proxy,
Object target,
Method method,
Object[] arguments,
Class<?> targetClass,
List<Object> interceptorsAndDynamicMethodMatchers)
创建一个方法调用对象
|
| 限定符和类型 | 方法和说明 |
|---|---|
Object[] |
getArguments()
方法实现说明: 获取调用对象参数列表
|
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()
方法实现说明:处理下一个拦截器对象
|
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() |
protected final Object proxy
@Nullable protected final Object target
protected final Method method
protected Object[] arguments
protected final List<?> interceptorsAndDynamicMethodMatchers
protected ReflectiveMethodInvocation(Object proxy, @Nullable Object target, Method method, @Nullable Object[] arguments, @Nullable Class<?> targetClass, List<Object> interceptorsAndDynamicMethodMatchers)
proxy - 代理对象target - 目标对象method - 执行的目标方法arguments - 执行目标方法的参数targetClass - 目标对象的classinterceptorsAndDynamicMethodMatchers - 我们的方法拦截器
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.public final Object getProxy()
ProxyMethodInvocationgetProxy 在接口中 ProxyMethodInvocation@Nullable public final Object getThis()
JoinpointFor instance, the target object for an invocation.
public final AccessibleObject getStaticPart()
JoinpointThe static part is an accessible object on which a chain of interceptors are installed.
getStaticPart 在接口中 Joinpointpublic final Method getMethod()
getMethod 在接口中 MethodInvocationpublic final Object[] getArguments()
InvocationgetArguments 在接口中 Invocationpublic void setArguments(Object... arguments)
ProxyMethodInvocationsetArguments 在接口中 ProxyMethodInvocationarguments - the argument array@Nullable protected Object invokeJoinpoint() throws Throwable
Throwable - if invoking the joinpoint resulted in an exceptionpublic MethodInvocation invocableClone()
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 在接口中 ProxyMethodInvocationproceed() can be called once per clone.Object.clone()public MethodInvocation invocableClone(Object... arguments)
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 在接口中 ProxyMethodInvocationarguments - the arguments that the cloned invocation is supposed to use,
overriding the original argumentsproceed() can be called once per clone.Object.clone()public void setUserAttribute(String key, @Nullable Object value)
ProxyMethodInvocationSuch 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 在接口中 ProxyMethodInvocationkey - the name of the attributevalue - the value of the attribute, or null to reset it@Nullable public Object getUserAttribute(String key)
ProxyMethodInvocationgetUserAttribute 在接口中 ProxyMethodInvocationkey - the name of the attributenull if not setProxyMethodInvocation.setUserAttribute(java.lang.String, java.lang.Object)public Map<String,Object> getUserAttributes()
This map is initialized lazily and is not used in the AOP framework itself.
null)