public class AsyncAnnotationAdvisor extends AbstractPointcutAdvisor implements BeanFactoryAware
Async
annotation. This annotation can be used at the method and type level in
implementation classes as well as in service interfaces.
This advisor detects the EJB 3.1 javax.ejb.Asynchronous
annotation as well, treating it exactly like Spring's own Async
.
Furthermore, a custom async annotation type may get specified through the
"asyncAnnotationType"
property.
PersistenceExceptionTranslationAdvisor
,
Repository
,
DataAccessException
,
PersistenceExceptionTranslator
,
Serialized FormModifier and Type | Field and Description |
---|---|
private Advice |
advice |
private AsyncUncaughtExceptionHandler |
exceptionHandler |
private Pointcut |
pointcut |
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
Constructor and Description |
---|
AsyncAnnotationAdvisor()
Create a new
AsyncAnnotationAdvisor for bean-style configuration. |
AsyncAnnotationAdvisor(java.util.concurrent.Executor executor,
AsyncUncaughtExceptionHandler exceptionHandler)
Create a new
AsyncAnnotationAdvisor for the given task executor. |
Modifier and Type | Method and Description |
---|---|
protected Advice |
buildAdvice(java.util.concurrent.Executor executor,
AsyncUncaughtExceptionHandler exceptionHandler) |
protected Pointcut |
buildPointcut(java.util.Set<java.lang.Class<? extends java.lang.annotation.Annotation>> asyncAnnotationTypes)
Calculate a pointcut for the given async annotation types, if any.
|
Advice |
getAdvice()
Return the advice part of this aspect.
|
Pointcut |
getPointcut()
Get the Pointcut that drives this advisor.
|
void |
setAsyncAnnotationType(java.lang.Class<? extends java.lang.annotation.Annotation> asyncAnnotationType)
Set the 'async' annotation type.
|
void |
setBeanFactory(BeanFactory beanFactory)
Set the
BeanFactory to be used when looking up executors by qualifier. |
void |
setTaskExecutor(java.util.concurrent.Executor executor)
Specify the default task executor to use for asynchronous methods.
|
equals, getOrder, hashCode, isPerInstance, setOrder
private AsyncUncaughtExceptionHandler exceptionHandler
private Advice advice
private Pointcut pointcut
public AsyncAnnotationAdvisor()
AsyncAnnotationAdvisor
for bean-style configuration.public AsyncAnnotationAdvisor(java.util.concurrent.Executor executor, AsyncUncaughtExceptionHandler exceptionHandler)
AsyncAnnotationAdvisor
for the given task executor.executor
- the task executor to use for asynchronous methodsexceptionHandler
- the AsyncUncaughtExceptionHandler
to use to
handle unexpected exception thrown by asynchronous method executionspublic void setTaskExecutor(java.util.concurrent.Executor executor)
public void setAsyncAnnotationType(java.lang.Class<? extends java.lang.annotation.Annotation> asyncAnnotationType)
The default async annotation type is the Async
annotation, as well
as the EJB 3.1 javax.ejb.Asynchronous
annotation (if present).
This setter property exists so that developers can provide their own (non-Spring-specific) annotation type to indicate that a method is to be executed asynchronously.
asyncAnnotationType
- the desired annotation typepublic void setBeanFactory(BeanFactory beanFactory)
BeanFactory
to be used when looking up executors by qualifier.setBeanFactory
in interface BeanFactoryAware
beanFactory
- owning BeanFactory (never null
).
The bean can immediately call methods on the factory.BeanInitializationException
public Advice getAdvice()
Advisor
getAdvice
in interface Advisor
org.aopalliance.intercept.MethodInterceptor
,
BeforeAdvice
,
ThrowsAdvice
,
AfterReturningAdvice
public Pointcut getPointcut()
PointcutAdvisor
getPointcut
in interface PointcutAdvisor
protected Advice buildAdvice(java.util.concurrent.Executor executor, AsyncUncaughtExceptionHandler exceptionHandler)
protected Pointcut buildPointcut(java.util.Set<java.lang.Class<? extends java.lang.annotation.Annotation>> asyncAnnotationTypes)
asyncAnnotationTypes
- the async annotation types to introspectnull
if none