类 AopUtils
- java.lang.Object
- org.springframework.aop.support.AopUtils
public abstract class AopUtils extends Object
Utility methods for AOP support code.Mainly for internal use within Spring's AOP support.
See
AopProxyUtils
for a collection of framework-specific AOP utility methods which depend on internals of Spring's AOP framework implementation.- 作者:
- Rod Johnson, Juergen Hoeller, Rob Harrop
- 另请参阅:
AopProxyUtils
构造器概要
构造器 构造器 说明 AopUtils()
方法概要
所有方法 静态方法 具体方法 修饰符和类型 方法 说明 static boolean
canApply(Advisor advisor, Class<?> targetClass)
Can the given advisor apply at all on the given class?static boolean
canApply(Advisor advisor, Class<?> targetClass, boolean hasIntroductions)
Can the given advisor apply at all on the given class?static boolean
canApply(Pointcut pc, Class<?> targetClass)
Can the given pointcut apply at all on the given class?static boolean
canApply(Pointcut pc, Class<?> targetClass, boolean hasIntroductions)
Can the given pointcut apply at all on the given class?static List<Advisor>
findAdvisorsThatCanApply(List<Advisor> candidateAdvisors, Class<?> clazz)
Determine the sublist of thecandidateAdvisors
list that is applicable to the given class.static Method
getMostSpecificMethod(Method method, Class<?> targetClass)
Given a method, which may come from an interface, and a target class used in the current AOP invocation, find the corresponding target method if there is one.static Class<?>
getTargetClass(Object candidate)
Determine the target class of the given bean instance which might be an AOP proxy.static Object
invokeJoinpointUsingReflection(Object target, Method method, Object[] args)
Invoke the given target via reflection, as part of an AOP method invocation.static boolean
isAopProxy(Object object)
Check whether the given object is a JDK dynamic proxy or a CGLIB proxy.static boolean
isCglibProxy(Object object)
Check whether the given object is a CGLIB proxy.static boolean
isEqualsMethod(Method method)
Determine whether the given method is an "equals" method.static boolean
isFinalizeMethod(Method method)
Determine whether the given method is a "finalize" method.static boolean
isHashCodeMethod(Method method)
Determine whether the given method is a "hashCode" method.static boolean
isJdkDynamicProxy(Object object)
Check whether the given object is a JDK dynamic proxy.static boolean
isToStringMethod(Method method)
Determine whether the given method is a "toString" method.static Method
selectInvocableMethod(Method method, Class<?> targetType)
Select an invocable method on the target type: either the given method itself if actually exposed on the target type, or otherwise a corresponding method on one of the target type's interfaces or on the target type itself.
构造器详细资料
AopUtils
public AopUtils()
方法详细资料
isAopProxy
public static boolean isAopProxy(Object object)
Check whether the given object is a JDK dynamic proxy or a CGLIB proxy.This method additionally checks if the given object is an instance of
SpringProxy
.- 参数:
object
- the object to check- 另请参阅:
isJdkDynamicProxy(java.lang.Object)
,isCglibProxy(java.lang.Object)
isJdkDynamicProxy
public static boolean isJdkDynamicProxy(Object object)
Check whether the given object is a JDK dynamic proxy.This method goes beyond the implementation of
Proxy.isProxyClass(Class)
by additionally checking if the given object is an instance ofSpringProxy
.- 参数:
object
- the object to check- 另请参阅:
Proxy.isProxyClass(java.lang.Class<?>)
isCglibProxy
public static boolean isCglibProxy(Object object)
Check whether the given object is a CGLIB proxy.This method goes beyond the implementation of
ClassUtils.isCglibProxy(Object)
by additionally checking if the given object is an instance ofSpringProxy
.- 参数:
object
- the object to check- 另请参阅:
ClassUtils.isCglibProxy(Object)
getTargetClass
public static Class<?> getTargetClass(Object candidate)
Determine the target class of the given bean instance which might be an AOP proxy.Returns the target class for an AOP proxy or the plain class otherwise.
- 参数:
candidate
- the instance to check (might be an AOP proxy)- 返回:
- the target class (or the plain class of the given object as fallback; never
null
) - 另请参阅:
TargetClassAware.getTargetClass()
,AopProxyUtils.ultimateTargetClass(Object)
selectInvocableMethod
public static Method selectInvocableMethod(Method method, Class<?> targetType)
Select an invocable method on the target type: either the given method itself if actually exposed on the target type, or otherwise a corresponding method on one of the target type's interfaces or on the target type itself.- 参数:
method
- the method to checktargetType
- the target type to search methods on (typically an AOP proxy)- 返回:
- a corresponding invocable method on the target type
- 抛出:
IllegalStateException
- if the given method is not invocable on the given target type (typically due to a proxy mismatch)- 从以下版本开始:
- 4.3
- 另请参阅:
MethodIntrospector.selectInvocableMethod(Method, Class)
isEqualsMethod
public static boolean isEqualsMethod(Method method)
Determine whether the given method is an "equals" method.
isHashCodeMethod
public static boolean isHashCodeMethod(Method method)
Determine whether the given method is a "hashCode" method.- 另请参阅:
Object.hashCode()
isToStringMethod
public static boolean isToStringMethod(Method method)
Determine whether the given method is a "toString" method.- 另请参阅:
Object.toString()
isFinalizeMethod
public static boolean isFinalizeMethod(Method method)
Determine whether the given method is a "finalize" method.- 另请参阅:
Object.finalize()
getMostSpecificMethod
public static Method getMostSpecificMethod(Method method, Class<?> targetClass)
Given a method, which may come from an interface, and a target class used in the current AOP invocation, find the corresponding target method if there is one. E.g. the method may beIFoo.bar()
and the target class may beDefaultFoo
. In this case, the method may beDefaultFoo.bar()
. This enables attributes on that method to be found.NOTE: In contrast to
ClassUtils.getMostSpecificMethod(java.lang.reflect.Method, java.lang.Class<?>)
, this method resolves Java 5 bridge methods in order to retrieve attributes from the original method definition.- 参数:
method
- the method to be invoked, which may come from an interfacetargetClass
- the target class for the current invocation. May benull
or may not even implement the method.- 返回:
- the specific target method, or the original method if the
targetClass
doesn't implement it or isnull
- 另请参阅:
ClassUtils.getMostSpecificMethod(java.lang.reflect.Method, java.lang.Class<?>)
canApply
public static boolean canApply(Pointcut pc, Class<?> targetClass)
Can the given pointcut apply at all on the given class?This is an important test as it can be used to optimize out a pointcut for a class.
- 参数:
pc
- the static or dynamic pointcut to checktargetClass
- the class to test- 返回:
- whether the pointcut can apply on any method
canApply
public static boolean canApply(Pointcut pc, Class<?> targetClass, boolean hasIntroductions)
Can the given pointcut apply at all on the given class?This is an important test as it can be used to optimize out a pointcut for a class.
- 参数:
pc
- the static or dynamic pointcut to checktargetClass
- the class to testhasIntroductions
- whether or not the advisor chain for this bean includes any introductions- 返回:
- whether the pointcut can apply on any method
canApply
public static boolean canApply(Advisor advisor, Class<?> targetClass)
Can the given advisor apply at all on the given class? This is an important test as it can be used to optimize out a advisor for a class.- 参数:
advisor
- the advisor to checktargetClass
- class we're testing- 返回:
- whether the pointcut can apply on any method
canApply
public static boolean canApply(Advisor advisor, Class<?> targetClass, boolean hasIntroductions)
Can the given advisor apply at all on the given class?This is an important test as it can be used to optimize out a advisor for a class. This version also takes into account introductions (for IntroductionAwareMethodMatchers).
- 参数:
advisor
- the advisor to checktargetClass
- class we're testinghasIntroductions
- whether or not the advisor chain for this bean includes any introductions- 返回:
- whether the pointcut can apply on any method
findAdvisorsThatCanApply
public static List<Advisor> findAdvisorsThatCanApply(List<Advisor> candidateAdvisors, Class<?> clazz)
Determine the sublist of thecandidateAdvisors
list that is applicable to the given class.- 参数:
candidateAdvisors
- the Advisors to evaluateclazz
- the target class- 返回:
- sublist of Advisors that can apply to an object of the given class (may be the incoming List as-is)
invokeJoinpointUsingReflection
public static Object invokeJoinpointUsingReflection(Object target, Method method, Object[] args) throws Throwable
Invoke the given target via reflection, as part of an AOP method invocation.- 参数:
target
- the target objectmethod
- the method to invokeargs
- the arguments for the method- 返回:
- the invocation result, if any
- 抛出:
Throwable
- if thrown by the target methodAopInvocationException
- in case of a reflection error