AbstractAdvisorAutoProxyCreator (Spring Framework 3.2.1.RELEASE API)
Date: 2013-01-24

org.springframework.aop.framework.autoproxy

## Class AbstractAdvisorAutoProxyCreator

- java.lang.Object
- - org.springframework.aop.framework.ProxyConfig
  - - org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator
    - - org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator

- All Implemented Interfaces:
    Serializable, AopInfrastructureBean, Aware, BeanClassLoaderAware, BeanFactoryAware, BeanPostProcessor, InstantiationAwareBeanPostProcessor, SmartInstantiationAwareBeanPostProcessor, Ordered
  Direct Known Subclasses:
    AspectJAwareAdvisorAutoProxyCreator, DefaultAdvisorAutoProxyCreator, InfrastructureAdvisorAutoProxyCreator

      public abstract class AbstractAdvisorAutoProxyCreator
      extends AbstractAutoProxyCreator

  Generic auto proxy creator that builds AOP proxies for specific beans based on detected Advisors for each bean.

  Subclasses must implement the abstract `findCandidateAdvisors()` method to return a list of Advisors applying to any object. Subclasses can also override the inherited `AbstractAutoProxyCreator.shouldSkip(java.lang.Class<?>, java.lang.String)` method to exclude certain objects from auto-proxying.

  Advisors or advices requiring ordering should implement the `Ordered` interface. This class sorts Advisors by Ordered order value. Advisors that don't implement the Ordered interface will be considered as unordered; they will appear at the end of the advisor chain in undefined order.

  Author:
    Rod Johnson, Juergen Hoeller
  See Also:
    `findCandidateAdvisors()`, Serialized Form

- - ### Field Summary

    - ### Fields inherited from class org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator

      `DO_NOT_PROXY, logger, PROXY_WITHOUT_ADDITIONAL_INTERCEPTORS`

    - ### Fields inherited from interface org.springframework.core.Ordered

      `HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AbstractAdvisorAutoProxyCreator()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected boolean` | `advisorsPreFiltered()` This auto-proxy creator always returns pre-filtered Advisors.
    `protected void` | `extendAdvisors(List<Advisor> candidateAdvisors)` Extension hook that subclasses can override to register additional Advisors, given the sorted Advisors obtained to date.
    `protected List<Advisor>` | `findAdvisorsThatCanApply(List<Advisor> candidateAdvisors, Class beanClass, String beanName)` Search the given candidate Advisors to find all Advisors that can apply to the specified bean.
    `protected List<Advisor>` | `findCandidateAdvisors()` Find all candidate Advisors to use in auto-proxying.
    `protected List<Advisor>` | `findEligibleAdvisors(Class beanClass, String beanName)` Find all eligible Advisors for auto-proxying this class.
    `protected Object[]` | `getAdvicesAndAdvisorsForBean(Class beanClass, String beanName, TargetSource targetSource)` Return whether the given bean is to be proxied, what additional advices (e.g.
    `protected void` | `initBeanFactory(ConfigurableListableBeanFactory beanFactory)`
    `protected boolean` | `isEligibleAdvisorBean(String beanName)` Return whether the Advisor bean with the given name is eligible for proxying in the first place.
    `void` | `setBeanFactory(BeanFactory beanFactory)` Callback that supplies the owning factory to a bean instance.
    `protected List<Advisor>` | `sortAdvisors(List<Advisor> advisors)` Sort advisors based on ordering.

    - ### Methods inherited from class org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator

      `buildAdvisors, createProxy, customizeProxyFactory, determineCandidateConstructors, getBeanFactory, getCacheKey, getCustomTargetSource, getEarlyBeanReference, getOrder, isFrozen, isInfrastructureClass, postProcessAfterInitialization, postProcessAfterInstantiation, postProcessBeforeInitialization, postProcessBeforeInstantiation, postProcessPropertyValues, predictBeanType, setAdvisorAdapterRegistry, setApplyCommonInterceptorsFirst, setBeanClassLoader, setCustomTargetSourceCreators, setFrozen, setInterceptorNames, setOrder, setProxyClassLoader, shouldProxyTargetClass, shouldSkip, wrapIfNecessary`

    - ### Methods inherited from class org.springframework.aop.framework.ProxyConfig

      `copyFrom, isExposeProxy, isOpaque, isOptimize, isProxyTargetClass, setExposeProxy, setOpaque, setOptimize, setProxyTargetClass, toString`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### AbstractAdvisorAutoProxyCreator

          public AbstractAdvisorAutoProxyCreator()

  - ### Method Detail

    - #### setBeanFactory

          public void setBeanFactory(BeanFactory beanFactory)

      Description copied from interface: `BeanFactoryAware`
      Callback that supplies the owning factory to a bean instance.

      Invoked after the population of normal bean properties but before an initialization callback such as `InitializingBean.afterPropertiesSet()` or a custom init-method.

      Specified by:
        `setBeanFactory` in interface `BeanFactoryAware`
      Overrides:
        `setBeanFactory` in class `AbstractAutoProxyCreator`
      Parameters:
        `beanFactory` - owning BeanFactory (never `null`). The bean can immediately call methods on the factory.
      See Also:
        `BeanInitializationException`

    - #### initBeanFactory

          protected void initBeanFactory(ConfigurableListableBeanFactory beanFactory)

    - #### getAdvicesAndAdvisorsForBean

          protected Object[] getAdvicesAndAdvisorsForBean(Class beanClass,
                                              String beanName,
                                              TargetSource targetSource)

      Description copied from class: `AbstractAutoProxyCreator`
      Return whether the given bean is to be proxied, what additional advices (e.g. AOP Alliance interceptors) and advisors to apply.
      Specified by:
        `getAdvicesAndAdvisorsForBean` in class `AbstractAutoProxyCreator`
      Parameters:
        `beanClass` - the class of the bean to advise
        `beanName` - the name of the bean
        `targetSource` - the TargetSource returned by the `AbstractAutoProxyCreator.getCustomTargetSource(java.lang.Class<?>, java.lang.String)` method: may be ignored. Will be `null` if no custom target source is in use.
      Returns:
        an array of additional interceptors for the particular bean; or an empty array if no additional interceptors but just the common ones; or `null` if no proxy at all, not even with the common interceptors. See constants DO_NOT_PROXY and PROXY_WITHOUT_ADDITIONAL_INTERCEPTORS.
      See Also:
        `AbstractAutoProxyCreator.DO_NOT_PROXY`, `AbstractAutoProxyCreator.PROXY_WITHOUT_ADDITIONAL_INTERCEPTORS`

    - #### findEligibleAdvisors

          protected List<Advisor> findEligibleAdvisors(Class beanClass,
                                           String beanName)

      Find all eligible Advisors for auto-proxying this class.
      Parameters:
        `beanClass` - the clazz to find advisors for
        `beanName` - the name of the currently proxied bean
      Returns:
        the empty List, not `null`, if there are no pointcuts or interceptors
      See Also:
        `findCandidateAdvisors()`, `sortAdvisors(java.util.List<org.springframework.aop.Advisor>)`, `extendAdvisors(java.util.List<org.springframework.aop.Advisor>)`

    - #### findCandidateAdvisors

          protected List<Advisor> findCandidateAdvisors()

      Find all candidate Advisors to use in auto-proxying.
      Returns:
        the List of candidate Advisors

    - #### findAdvisorsThatCanApply

          protected List<Advisor> findAdvisorsThatCanApply(List<Advisor> candidateAdvisors,
                                               Class beanClass,
                                               String beanName)

      Search the given candidate Advisors to find all Advisors that can apply to the specified bean.
      Parameters:
        `candidateAdvisors` - the candidate Advisors
        `beanClass` - the target's bean class
        `beanName` - the target's bean name
      Returns:
        the List of applicable Advisors
      See Also:
        `ProxyCreationContext.getCurrentProxiedBeanName()`

    - #### isEligibleAdvisorBean

          protected boolean isEligibleAdvisorBean(String beanName)

      Return whether the Advisor bean with the given name is eligible for proxying in the first place.
      Parameters:
        `beanName` - the name of the Advisor bean
      Returns:
        whether the bean is eligible

    - #### sortAdvisors

          protected List<Advisor> sortAdvisors(List<Advisor> advisors)

      Sort advisors based on ordering. Subclasses may choose to override this method to customize the sorting strategy.
      Parameters:
        `advisors` - the source List of Advisors
      Returns:
        the sorted List of Advisors
      See Also:
        `Ordered`, `OrderComparator`

    - #### extendAdvisors

          protected void extendAdvisors(List<Advisor> candidateAdvisors)

      Extension hook that subclasses can override to register additional Advisors, given the sorted Advisors obtained to date.

      The default implementation is empty.

      Typically used to add Advisors that expose contextual information required by some of the later advisors.

      Parameters:
        `candidateAdvisors` - Advisors that have already been identified as applying to a given bean

    - #### advisorsPreFiltered

          protected boolean advisorsPreFiltered()

      This auto-proxy creator always returns pre-filtered Advisors.
      Overrides:
        `advisorsPreFiltered` in class `AbstractAutoProxyCreator`
      Returns:
        whether the Advisors are pre-filtered
      See Also:
        `AbstractAutoProxyCreator.getAdvicesAndAdvisorsForBean(java.lang.Class<?>, java.lang.String, org.springframework.aop.TargetSource)`, `Advised.setPreFiltered(boolean)`