类 AopUtils

java.lang.Object
infra.aop.support.AopUtils

public abstract class AopUtils extends Object
Utility methods for AOP support code.

Mainly for internal use within AOP support.

从以下版本开始:
3.0 2021/2/1 18:46
作者:
Rod Johnson, Juergen Hoeller, Rob Harrop, Harry Yang
另请参阅:
  • 构造器详细资料

    • 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 StandardProxy.

      参数:
      object - the object to check
      另请参阅:
    • 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 of StandardProxy.

      参数:
      object - the object to check
      另请参阅:
    • isCglibProxy

      public static boolean isCglibProxy(Object object)
      Check whether the given object is a CGLIB proxy.
      参数:
      object - the object to check
    • 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)
      另请参阅:
    • getTargetClass

      public static Class<?> getTargetClass(MethodInvocation invocation)
      Determine the target class of the given invocation.

      Returns the target class for an AOP proxy or the plain class otherwise.

      参数:
      invocation - the instance to check
      返回:
      the target class (or the plain class of the given object as fallback; never null)
      另请参阅:
    • getMostSpecificMethod

      public static Method getMostSpecificMethod(Method method, @Nullable 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 be IFoo.bar() and the target class may be DefaultFoo. In this case, the method may be DefaultFoo.bar(). This enables attributes on that method to be found.

      NOTE: In contrast to ReflectionUtils.getMostSpecificMethod(java.lang.reflect.Method, java.lang.Class<?>), this method resolves bridge methods in order to retrieve attributes from the original method definition.

      参数:
      method - the method to be invoked, which may come from an interface
      targetClass - the target class for the current invocation. May be null or may not even implement the method.
      返回:
      the specific target method, or the original method if the targetClass doesn't implement it or is null
      从以下版本开始:
      4.0
      另请参阅:
      • ReflectionUtils.getMostSpecificMethod(java.lang.reflect.Method, java.lang.Class<?>)
      • BridgeMethodResolver.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 check
      targetClass - 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 check
      targetClass - the class to test
      hasIntroductions - 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 check
      targetClass - 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 check
      targetClass - class we're testing
      hasIntroductions - whether or not the advisor chain for this bean includes any introductions
      返回:
      whether the pointcut can apply on any method
    • filterAdvisors

      public static List<Advisor> filterAdvisors(List<Advisor> candidateAdvisors, Class<?> clazz)
      Determine the sublist of the candidateAdvisors list that is applicable to the given class.
      参数:
      candidateAdvisors - the Advisors to evaluate
      clazz - 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(@Nullable Object target, Method method, Object[] args) throws Throwable
      Invoke the given target via reflection, as part of an AOP method invocation.
      参数:
      target - the target object
      method - the method to invoke
      args - the arguments for the method
      返回:
      the invocation result, if any
      抛出:
      Throwable - if thrown by the target method
      AopInvocationException - in case of a reflection error
    • selectInvocableMethod

      public static Method selectInvocableMethod(Method method, @Nullable 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 check
      targetType - 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.0
      另请参阅:
      • MethodIntrospector.selectInvocableMethod(Method, Class)