org.springframework.aop.aspectj.autoproxy
Class AspectJAwareAdvisorAutoProxyCreator

java.lang.Object
  extended by org.springframework.aop.framework.ProxyConfig
      extended by org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator
          extended by org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator
              extended by org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator
All Implemented Interfaces:
Serializable, AopInfrastructureBean, 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:
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
AspectJAwareAdvisorAutoProxyCreator()
           
 
Method Summary
protected  void extendAdvisors(List<Advisor> candidateAdvisors)
          Adds an ExposeInvocationInterceptor to the beginning of the advice chain.
protected  boolean shouldSkip(Class beanClass, String beanName)
          Subclasses should override this method to return true if the given bean should not be considered for auto-proxying by this post-processor.
protected  List<Advisor> sortAdvisors(List<Advisor> advisors)
          Sort the rest by AspectJ precedence.
 
Methods inherited from class org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator
advisorsPreFiltered, findAdvisorsThatCanApply, findCandidateAdvisors, findEligibleAdvisors, getAdvicesAndAdvisorsForBean, initBeanFactory, isEligibleAdvisorBean, setBeanFactory
 
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, 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

AspectJAwareAdvisorAutoProxyCreator

public AspectJAwareAdvisorAutoProxyCreator()
Method Detail

sortAdvisors

protected List<Advisor> sortAdvisors(List<Advisor> advisors)
Sort the rest by AspectJ precedence. If two pieces of advice have 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:

Important: Advisors are sorted in precedence order, from highest precedence to 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:
Ordered, OrderComparator

extendAdvisors

protected void extendAdvisors(List<Advisor> candidateAdvisors)
Adds an ExposeInvocationInterceptor to the beginning of the advice chain. These additional advices are needed when using AspectJ expression pointcuts and when using AspectJ-style advice.

Overrides:
extendAdvisors in class AbstractAdvisorAutoProxyCreator
Parameters:
candidateAdvisors - 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 if it will lead to a circular reference. This implementation returns false.

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