spring-context

org.springframework.scheduling.annotation
Class AsyncAnnotationBeanPostProcessor

java.lang.Object
  extended by org.springframework.aop.framework.ProxyConfig
      extended by org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor
All Implemented Interfaces:
java.io.Serializable, org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanClassLoaderAware, org.springframework.beans.factory.BeanFactoryAware, org.springframework.beans.factory.config.BeanPostProcessor, org.springframework.beans.factory.InitializingBean, org.springframework.core.Ordered

public class AsyncAnnotationBeanPostProcessor
extends org.springframework.aop.framework.ProxyConfig
implements org.springframework.beans.factory.config.BeanPostProcessor, org.springframework.beans.factory.BeanClassLoaderAware, org.springframework.beans.factory.BeanFactoryAware, org.springframework.beans.factory.InitializingBean, org.springframework.core.Ordered

Bean post-processor that automatically applies asynchronous invocation behavior to any bean that carries the Async annotation at class or method-level by adding a corresponding AsyncAnnotationAdvisor to the exposed proxy (either an existing AOP proxy or a newly generated proxy that implements all of the target's interfaces).

The TaskExecutor responsible for the asynchronous execution may be provided as well as the annotation type that indicates a method should be invoked asynchronously. If no annotation type is specified, this post- processor will detect both Spring's @Async annotation as well as the EJB 3.1 javax.ejb.Asynchronous annotation.

Since:
3.0
Author:
Mark Fisher, Juergen Hoeller
See Also:
Async, AsyncAnnotationAdvisor, Serialized Form

Field Summary
 
Fields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
 
Constructor Summary
AsyncAnnotationBeanPostProcessor()
           
 
Method Summary
 void afterPropertiesSet()
           
 int getOrder()
           
 java.lang.Object postProcessAfterInitialization(java.lang.Object bean, java.lang.String beanName)
           
 java.lang.Object postProcessBeforeInitialization(java.lang.Object bean, java.lang.String beanName)
           
 void setAsyncAnnotationType(java.lang.Class<? extends java.lang.annotation.Annotation> asyncAnnotationType)
          Set the 'async' annotation type to be detected at either class or method level.
 void setBeanClassLoader(java.lang.ClassLoader classLoader)
           
 void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
           
 void setExecutor(java.util.concurrent.Executor executor)
          Set the Executor to use when invoking methods asynchronously.
 void setOrder(int order)
           
 
Methods inherited from class org.springframework.aop.framework.ProxyConfig
copyFrom, isExposeProxy, isFrozen, isOpaque, isOptimize, isProxyTargetClass, setExposeProxy, setFrozen, setOpaque, setOptimize, setProxyTargetClass, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

AsyncAnnotationBeanPostProcessor

public AsyncAnnotationBeanPostProcessor()
Method Detail

setAsyncAnnotationType

public void setAsyncAnnotationType(java.lang.Class<? extends java.lang.annotation.Annotation> asyncAnnotationType)
Set the 'async' annotation type to be detected at either class or method level. By default, both the Async annotation and the EJB 3.1 javax.ejb.Asynchronous annotation will be detected.

This setter property exists so that developers can provide their own (non-Spring-specific) annotation type to indicate that a method (or all methods of a given class) should be invoked asynchronously.

Parameters:
asyncAnnotationType - the desired annotation type

setExecutor

public void setExecutor(java.util.concurrent.Executor executor)
Set the Executor to use when invoking methods asynchronously.


setBeanClassLoader

public void setBeanClassLoader(java.lang.ClassLoader classLoader)
Specified by:
setBeanClassLoader in interface org.springframework.beans.factory.BeanClassLoaderAware

setBeanFactory

public void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
                    throws org.springframework.beans.BeansException
Specified by:
setBeanFactory in interface org.springframework.beans.factory.BeanFactoryAware
Throws:
org.springframework.beans.BeansException

afterPropertiesSet

public void afterPropertiesSet()
Specified by:
afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean

getOrder

public int getOrder()
Specified by:
getOrder in interface org.springframework.core.Ordered

setOrder

public void setOrder(int order)

postProcessBeforeInitialization

public java.lang.Object postProcessBeforeInitialization(java.lang.Object bean,
                                                        java.lang.String beanName)
Specified by:
postProcessBeforeInitialization in interface org.springframework.beans.factory.config.BeanPostProcessor

postProcessAfterInitialization

public java.lang.Object postProcessAfterInitialization(java.lang.Object bean,
                                                       java.lang.String beanName)
Specified by:
postProcessAfterInitialization in interface org.springframework.beans.factory.config.BeanPostProcessor

spring-context