public class AsyncAnnotationBeanPostProcessor
extends org.springframework.aop.framework.autoproxy.AbstractBeanFactoryAwareAdvisingPostProcessor
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.
For methods having a void
return type, any exception thrown
during the asynchronous method invocation cannot be accessed by the
caller. An AsyncUncaughtExceptionHandler
can be specified to handle
these cases.
Note: The underlying async advisor applies before existing advisors by default, in order to switch to async execution as early as possible in the invocation chain.
Async
,
AsyncAnnotationAdvisor
,
AbstractAdvisingBeanPostProcessor.setBeforeExistingAdvisors(boolean)
,
ScheduledAnnotationBeanPostProcessor
,
Serialized FormModifier and Type | Field and Description |
---|---|
static String |
DEFAULT_TASK_EXECUTOR_BEAN_NAME
The default name of the
TaskExecutor bean to pick up: "taskExecutor". |
protected Log |
logger |
Constructor and Description |
---|
AsyncAnnotationBeanPostProcessor() |
Modifier and Type | Method and Description |
---|---|
void |
setAsyncAnnotationType(Class<? extends Annotation> asyncAnnotationType)
Set the 'async' annotation type to be detected at either class or method
level.
|
void |
setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory) |
void |
setExceptionHandler(org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler exceptionHandler)
Set the
AsyncUncaughtExceptionHandler to use to handle uncaught
exceptions thrown by asynchronous method executions. |
void |
setExecutor(Executor executor)
Set the
Executor to use when invoking methods asynchronously. |
prepareProxyFactory
customizeProxyFactory, isEligible, isEligible, postProcessAfterInitialization, postProcessBeforeInitialization, setBeforeExistingAdvisors
evaluateProxyInterfaces, getOrder, getProxyClassLoader, isConfigurationCallbackInterface, isInternalLanguageInterface, setBeanClassLoader, setOrder, setProxyClassLoader
public static final String DEFAULT_TASK_EXECUTOR_BEAN_NAME
TaskExecutor
bean to pick up: "taskExecutor".
Note that the initial lookup happens by type; this is just the fallback in case of multiple executor beans found in the context.
AsyncExecutionAspectSupport.DEFAULT_TASK_EXECUTOR_BEAN_NAME
,
Constant Field Valuesprotected final Log logger
public void setAsyncAnnotationType(Class<? extends Annotation> asyncAnnotationType)
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.
asyncAnnotationType
- the desired annotation typepublic void setExecutor(Executor executor)
Executor
to use when invoking methods asynchronously.
If not specified, default executor resolution will apply: searching for a
unique TaskExecutor
bean in the context, or for an Executor
bean named "taskExecutor" otherwise. If neither of the two is resolvable,
a local default executor will be created within the interceptor.
AsyncAnnotationAdvisor.AsyncAnnotationAdvisor(Executor, AsyncUncaughtExceptionHandler)
,
AsyncExecutionInterceptor.getDefaultExecutor(BeanFactory)
,
DEFAULT_TASK_EXECUTOR_BEAN_NAME
public void setExceptionHandler(org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler exceptionHandler)
AsyncUncaughtExceptionHandler
to use to handle uncaught
exceptions thrown by asynchronous method executions.public void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
setBeanFactory
in interface org.springframework.beans.factory.BeanFactoryAware
setBeanFactory
in class org.springframework.aop.framework.autoproxy.AbstractBeanFactoryAwareAdvisingPostProcessor