类 AdvisedSupport

java.lang.Object
infra.aop.framework.ProxyConfig
infra.aop.framework.AdvisedSupport
所有已实现的接口:
Advised, TargetClassAware, Serializable
直接已知子类:
ProxyCreatorSupport

public class AdvisedSupport extends ProxyConfig implements Advised
Base class for AOP proxy configuration managers. These are not themselves AOP proxies, but subclasses of this class are normally factories from which AOP proxy instances are obtained directly.

This class frees subclasses of the housekeeping of Advices and Advisors, but doesn't actually implement proxy creation methods, which are provided by subclasses.

This class is serializable; subclasses need not be. This class is used to hold snapshots of proxies.

从以下版本开始:
3.0 2021/2/1 20:23
作者:
Rod Johnson, Juergen Hoeller, Harry Yang
另请参阅:
  • 字段详细资料

    • serialVersionUID

      private static final long serialVersionUID
      另请参阅:
    • EMPTY_TARGET_SOURCE

      public static final TargetSource EMPTY_TARGET_SOURCE
      Canonical TargetSource when there's no target, and behavior is supplied by the advisors.
    • targetSource

      TargetSource targetSource
      Package-protected to allow direct access for efficiency.
    • preFiltered

      private boolean preFiltered
      Whether the Advisors are already filtered for the specific target class.
    • interceptorChainFactory

      private InterceptorChainFactory interceptorChainFactory
      The InterceptorChainFactory to use.
    • interfaces

      private ArrayList<Class<?>> interfaces
      Interfaces to be implemented by the proxy. Held in List to keep the order of registration, to create JDK proxy with specified order of interfaces.
    • advisors

      private ArrayList<Advisor> advisors
      List of Advisors. If Advice is added, it will be wrapped in an Advisor before being added to this List.
    • advisorKey

      ArrayList<Advisor> advisorKey
      List of minimal AdvisedSupport.AdvisorKeyEntry instances, to be assigned to the advisors field on reduction.
      从以下版本开始:
      4.0
      另请参阅:
    • methodCache

      @Nullable private transient ConcurrentHashMap<AdvisedSupport.MethodCacheKey,MethodInterceptor[]> methodCache
      Cache with Method as key and advisor chain List as value.
    • cachedInterceptors

      @Nullable private transient volatile MethodInterceptor[] cachedInterceptors
      Cache with shared interceptors which are not method-specific.
      从以下版本开始:
      4.0
    • proxyMetadataCache

      @Nullable transient volatile Object proxyMetadataCache
      Optional field for AopProxy implementations to store metadata in. Used for JdkDynamicAopProxy.ProxiedInterfacesCache.
      从以下版本开始:
      4.0
      另请参阅:
  • 构造器详细资料

    • AdvisedSupport

      public AdvisedSupport()
      No-arg constructor for use as a JavaBean.
    • AdvisedSupport

      public AdvisedSupport(Class<?>... interfaces)
      Create a AdvisedSupport instance with the given parameters.
      参数:
      interfaces - the proxied interfaces
  • 方法详细资料

    • setTarget

      public void setTarget(Object target)
      Set the given object as target. Will create a SingletonTargetSource for the object.
      另请参阅:
    • setTargetSource

      public void setTargetSource(@Nullable TargetSource targetSource)
      从接口复制的说明: Advised
      Change the TargetSource used by this Advised object.

      Only works if the configuration isn't frozen.

      指定者:
      setTargetSource 在接口中 Advised
      参数:
      targetSource - new TargetSource to use
    • getTargetSource

      public TargetSource getTargetSource()
      从接口复制的说明: Advised
      Return the TargetSource used by this Advised object.
      指定者:
      getTargetSource 在接口中 Advised
    • setInterceptorChainFactory

      public void setInterceptorChainFactory(InterceptorChainFactory interceptorChainFactory)
      Set the advisor chain factory to use.

      Default is a DefaultInterceptorChainFactory.

      从以下版本开始:
      4.0
    • getInterceptorChainFactory

      public InterceptorChainFactory getInterceptorChainFactory()
      Return the advisor chain factory to use (never null).
      从以下版本开始:
      4.0
    • setTargetClass

      public void setTargetClass(Class<?> targetClass)
      Set a target class to be proxied, indicating that the proxy should be cast-able to the given class.

      Internally, an EmptyTargetSource for the given target class will be used. The kind of proxy needed will be determined on actual creation of the proxy.

      This is a replacement for setting a "targetSource" or "target", for the case where we want a proxy based on a target class (which can be an interface or a concrete class) without having a fully capable TargetSource available.

      另请参阅:
    • getTargetClass

      @Nullable public Class<?> getTargetClass()
      从接口复制的说明: TargetClassAware
      Return the target class behind the implementing object (typically a proxy configuration or an actual proxy).
      指定者:
      getTargetClass 在接口中 TargetClassAware
      返回:
      the target Class, or null if not known
    • setPreFiltered

      public void setPreFiltered(boolean preFiltered)
      从接口复制的说明: Advised
      Set whether this proxy configuration is pre-filtered so that it only contains applicable advisors (matching this proxy's target class).

      Default is "false". Set this to "true" if the advisors have been pre-filtered already, meaning that the ClassFilter check can be skipped when building the actual advisor chain for proxy invocations.

      指定者:
      setPreFiltered 在接口中 Advised
      另请参阅:
    • isPreFiltered

      public boolean isPreFiltered()
      从接口复制的说明: Advised
      Return whether this proxy configuration is pre-filtered so that it only contains applicable advisors (matching this proxy's target class).
      指定者:
      isPreFiltered 在接口中 Advised
    • setInterfaces

      public void setInterfaces(Class<?>... interfaces)
      Set the interfaces to be proxied.
    • addInterface

      public void addInterface(Class<?> ifc)
      Add a new proxied interface.
      参数:
      ifc - the additional interface to proxy
    • removeInterface

      public boolean removeInterface(Class<?> ifc)
      Remove a proxied interface.

      Does nothing if the given interface isn't proxied.

      参数:
      ifc - the interface to remove from the proxy
      返回:
      true if the interface was removed; false if the interface was not found and hence could not be removed
    • getProxiedInterfaces

      public Class<?>[] getProxiedInterfaces()
      从接口复制的说明: Advised
      Return the interfaces proxied by the AOP proxy.

      Will not include the target class, which may also be proxied.

      指定者:
      getProxiedInterfaces 在接口中 Advised
    • isInterfaceProxied

      public boolean isInterfaceProxied(Class<?> ifc)
      从接口复制的说明: Advised
      Determine whether the given interface is proxied.
      指定者:
      isInterfaceProxied 在接口中 Advised
      参数:
      ifc - the interface to check
    • hasUserSuppliedInterfaces

      boolean hasUserSuppliedInterfaces()
    • isAdvisorIntroducedInterface

      private boolean isAdvisorIntroducedInterface(Class<?> ifc)
    • getAdvisors

      public final Advisor[] getAdvisors()
      从接口复制的说明: Advised
      Return the advisors applying to this proxy.
      指定者:
      getAdvisors 在接口中 Advised
      返回:
      an array of Advisors applying to this proxy (never null)
    • getAdvisorCount

      public int getAdvisorCount()
      从接口复制的说明: Advised
      Return the number of advisors applying to this proxy.

      The default implementation delegates to getAdvisors().length.

      指定者:
      getAdvisorCount 在接口中 Advised
    • addAdvisor

      public void addAdvisor(Advisor advisor)
      从接口复制的说明: Advised
      Add an advisor at the end of the advisor chain.

      The Advisor may be an IntroductionAdvisor, in which new interfaces will be available when a proxy is next obtained from the relevant factory.

      指定者:
      addAdvisor 在接口中 Advised
      参数:
      advisor - the advisor to add to the end of the chain
    • addAdvisor

      public void addAdvisor(int pos, Advisor advisor)
      从接口复制的说明: Advised
      Add an Advisor at the specified position in the chain.
      指定者:
      addAdvisor 在接口中 Advised
      参数:
      pos - position in chain (0 is head). Must be valid.
      advisor - the advisor to add at the specified position in the chain
    • removeAdvisor

      public boolean removeAdvisor(Advisor advisor)
      从接口复制的说明: Advised
      Remove the given advisor.
      指定者:
      removeAdvisor 在接口中 Advised
      参数:
      advisor - the advisor to remove
      返回:
      true if the advisor was removed; false if the advisor was not found and hence could not be removed
    • removeAdvisor

      public void removeAdvisor(int index)
      从接口复制的说明: Advised
      Remove the advisor at the given index.
      指定者:
      removeAdvisor 在接口中 Advised
      参数:
      index - the index of advisor to remove
    • indexOf

      public int indexOf(Advisor advisor)
      从接口复制的说明: Advised
      Return the index (from 0) of the given advisor, or -1 if no such advisor applies to this proxy.

      The return value of this method can be used to index into the advisors array.

      指定者:
      indexOf 在接口中 Advised
      参数:
      advisor - the advisor to search for
      返回:
      index from 0 of this advisor, or -1 if there's no such advisor
    • replaceAdvisor

      public boolean replaceAdvisor(Advisor a, Advisor b) throws AopConfigException
      从接口复制的说明: Advised
      Replace the given advisor.

      Note: If the advisor is an IntroductionAdvisor and the replacement is not or implements different interfaces, the proxy will need to be re-obtained or the old interfaces won't be supported and the new interface won't be implemented.

      指定者:
      replaceAdvisor 在接口中 Advised
      参数:
      a - the advisor to replace
      b - the advisor to replace it with
      返回:
      whether it was replaced. If the advisor wasn't found in the list of advisors, this method returns false and does nothing.
      抛出:
      AopConfigException - in case of invalid advice
    • addAdvisors

      public void addAdvisors(Advisor... advisors)
      Add all of the given advisors to this proxy configuration.
      参数:
      advisors - the advisors to register
    • addAdvisors

      public void addAdvisors(Collection<Advisor> advisors)
      Add all of the given advisors to this proxy configuration.
      参数:
      advisors - the advisors to register
    • validateIntroductionAdvisor

      private void validateIntroductionAdvisor(IntroductionAdvisor advisor)
    • addAdvisorInternal

      void addAdvisorInternal(int pos, Advisor advisor) throws AopConfigException
      抛出:
      AopConfigException
    • getAdvisorsInternal

      protected final List<Advisor> getAdvisorsInternal()
      Allows uncontrolled access to the List of Advisors.

      Use with care, and remember to fire advice changed events when making any modifications.

    • addAdvice

      public void addAdvice(Advice advice) throws AopConfigException
      从接口复制的说明: Advised
      Add the given AOP Alliance advice to the tail of the advice (interceptor) chain.

      This will be wrapped in a DefaultPointcutAdvisor with a pointcut that always applies, and returned from the getAdvisors() method in this wrapped form.

      Note that the given advice will apply to all invocations on the proxy, even to the toString() method! Use appropriate advice implementations or specify appropriate pointcuts to apply to a narrower set of methods.

      指定者:
      addAdvice 在接口中 Advised
      参数:
      advice - the advice to add to the tail of the chain
      抛出:
      AopConfigException - in case of invalid advice
      另请参阅:
    • addAdvice

      public void addAdvice(int pos, Advice advice) throws AopConfigException
      Cannot add introductions this way unless the advice implements IntroductionInfo.
      指定者:
      addAdvice 在接口中 Advised
      参数:
      pos - index from 0 (head)
      advice - the advice to add at the specified position in the advice chain
      抛出:
      AopConfigException - in case of invalid advice
    • removeAdvice

      public boolean removeAdvice(Advice advice) throws AopConfigException
      从接口复制的说明: Advised
      Remove the Advisor containing the given advice.
      指定者:
      removeAdvice 在接口中 Advised
      参数:
      advice - the advice to remove
      返回:
      true of the advice was found and removed; false if there was no such advice
      抛出:
      AopConfigException
    • indexOf

      public int indexOf(Advice advice)
      从接口复制的说明: Advised
      Return the index (from 0) of the given AOP Alliance Advice, or -1 if no such advice is an advice for this proxy.

      The return value of this method can be used to index into the advisors array.

      指定者:
      indexOf 在接口中 Advised
      参数:
      advice - the AOP Alliance advice to search for
      返回:
      index from 0 of this advice, or -1 if there's no such advice
    • adviceIncluded

      public boolean adviceIncluded(@Nullable Advice advice)
      Is the given advice included in any advisor within this proxy configuration?
      参数:
      advice - the advice to check inclusion of
      返回:
      whether this advice instance is included
    • countAdvicesOfType

      public int countAdvicesOfType(@Nullable Class<?> adviceClass)
      Count advices of the given class.
      参数:
      adviceClass - the advice class to check
      返回:
      the count of the interceptors of this class or subclasses
    • getInterceptors

      public MethodInterceptor[] getInterceptors(Method method, @Nullable Class<?> targetClass)
      Determine an array of MethodInterceptor objects for the given method, based on this configuration.

      ordered MethodInterceptor array

      参数:
      method - the proxied method
      targetClass - the target class
      返回:
      a array of MethodInterceptors (may also include RuntimeMethodInterceptor)
      另请参阅:
    • adviceChanged

      protected void adviceChanged()
      Invoked when advice has changed.
    • copyConfigurationFrom

      protected void copyConfigurationFrom(AdvisedSupport other)
      Call this method on a new instance created by the no-arg constructor to create an independent copy of the configuration from the given object.
      参数:
      other - the AdvisedSupport object to copy configuration from
    • copyConfigurationFrom

      protected void copyConfigurationFrom(AdvisedSupport other, TargetSource targetSource, List<Advisor> advisors)
      Copy the AOP configuration from the given AdvisedSupport object, but allow substitution of a fresh TargetSource and a given interceptor chain.
      参数:
      other - the AdvisedSupport object to take proxy configuration from
      targetSource - the new TargetSource
      advisors - the Advisors for the chain
    • getConfigurationOnlyCopy

      AdvisedSupport getConfigurationOnlyCopy()
      Build a configuration-only copy of this AdvisedSupport, replacing the TargetSource.
    • reduceToAdvisorKey

      void reduceToAdvisorKey()
    • readObject

      private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException
      抛出:
      IOException
      ClassNotFoundException
    • toProxyConfigString

      public String toProxyConfigString()
      从接口复制的说明: Advised
      As toString() will normally be delegated to the target, this returns the equivalent for the AOP proxy.
      指定者:
      toProxyConfigString 在接口中 Advised
      返回:
      a string description of the proxy configuration
    • toString

      public String toString()
      For debugging/diagnostic use.
      覆盖:
      toString 在类中 ProxyConfig