Class AspectJAwareAdvisorAutoProxyCreator

All Implemented Interfaces:
Serializable, AopInfrastructureBean, Aware, BeanClassLoaderAware, BeanFactoryAware, BeanPostProcessor, InstantiationAwareBeanPostProcessor, SmartInstantiationAwareBeanPostProcessor, Ordered
Direct Known Subclasses:
AnnotationAwareAspectJAutoProxyCreator

public class AspectJAwareAdvisorAutoProxyCreator extends AbstractAdvisorAutoProxyCreator
AbstractAdvisorAutoProxyCreator subclass that exposes AspectJ's invocation context and understands AspectJ's rules for advice precedence when multiple pieces of advice come from the same aspect.
Since:
2.0
Author:
Adrian Colyer, Juergen Hoeller, Ramnivas Laddad
See Also:
  • Constructor Details

    • AspectJAwareAdvisorAutoProxyCreator

      public AspectJAwareAdvisorAutoProxyCreator()
  • Method Details

    • sortAdvisors

      protected List<Advisor> sortAdvisors(List<Advisor> advisors)
      Sort the supplied Advisor instances according to AspectJ precedence.

      If two pieces of advice come from the same aspect, they will have the same order. Advice from the same aspect is then further ordered according to the following rules:

      • If either of the pair is after advice, then the advice declared last gets highest precedence (i.e., runs last).
      • Otherwise the advice declared first gets highest precedence (i.e., runs first).

      Important: Advisors are sorted in precedence order, from the highest precedence to the lowest. "On the way in" to a join point, the highest precedence advisor should run first. "On the way out" of a join point, the highest precedence advisor should run last.

      Overrides:
      sortAdvisors in class AbstractAdvisorAutoProxyCreator
      Parameters:
      advisors - the source List of Advisors
      Returns:
      the sorted List of Advisors
      See Also:
    • extendAdvisors

      protected void extendAdvisors(List<Advisor> candidateAdvisors)
      Add an ExposeInvocationInterceptor to the beginning of the advice chain.

      This additional advice is needed when using AspectJ pointcut expressions and when using AspectJ-style advice.

      Overrides:
      extendAdvisors in class AbstractAdvisorAutoProxyCreator
      Parameters:
      candidateAdvisors - the Advisors that have already been identified as applying to a given bean
    • shouldSkip

      protected boolean shouldSkip(Class<?> beanClass, String beanName)
      Description copied from class: AbstractAutoProxyCreator
      Subclasses should override this method to return true if the given bean should not be considered for auto-proxying by this post-processor.

      Sometimes we need to be able to avoid this happening, e.g. if it will lead to a circular reference or if the existing target instance needs to be preserved. This implementation returns false unless the bean name indicates an "original instance" according to AutowireCapableBeanFactory conventions.

      Overrides:
      shouldSkip in class AbstractAutoProxyCreator
      Parameters:
      beanClass - the class of the bean
      beanName - the name of the bean
      Returns:
      whether to skip the given bean
      See Also: