Class AsyncExecutionInterceptor
- All Implemented Interfaces:
Advice
,Interceptor
,MethodInterceptor
,Aware
,BeanFactoryAware
,Ordered
- Direct Known Subclasses:
AnnotationAsyncExecutionInterceptor
MethodInterceptor
that processes method invocations
asynchronously, using a given AsyncTaskExecutor
.
Typically used with the Async
annotation.
In terms of target method signatures, any parameter types are supported.
However, the return type is constrained to either void
or
java.util.concurrent.Future
. In the latter case, the Future handle
returned from the proxy will be an actual asynchronous Future that can be used
to track the result of the asynchronous method execution. However, since the
target method needs to implement the same signature, it will have to return
a temporary Future handle that just passes the return value through
(like Spring's AsyncResult
or EJB's jakarta.ejb.AsyncResult
).
When the return type is java.util.concurrent.Future
, any exception thrown
during the execution can be accessed and managed by the caller. With void
return type however, such exceptions cannot be transmitted back. In that case an
AsyncUncaughtExceptionHandler
can be registered to process such exceptions.
Note: the AnnotationAsyncExecutionInterceptor
subclass is preferred
due to its support for executor qualification in conjunction with Spring's
@Async
annotation.
- Since:
- 3.0
- Author:
- Juergen Hoeller, Chris Beams, Stephane Nicoll
- See Also:
-
Field Summary
Fields inherited from class org.springframework.aop.interceptor.AsyncExecutionAspectSupport
DEFAULT_TASK_EXECUTOR_BEAN_NAME, logger
Fields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
-
Constructor Summary
ConstructorDescriptionAsyncExecutionInterceptor
(Executor defaultExecutor) Create a new instance with a defaultAsyncUncaughtExceptionHandler
.AsyncExecutionInterceptor
(Executor defaultExecutor, AsyncUncaughtExceptionHandler exceptionHandler) Create a newAsyncExecutionInterceptor
. -
Method Summary
Modifier and TypeMethodDescriptionprotected Executor
getDefaultExecutor
(BeanFactory beanFactory) This implementation searches for a uniqueTaskExecutor
bean in the context, or for anExecutor
bean named "taskExecutor" otherwise.protected String
getExecutorQualifier
(Method method) Get the qualifier for a specific executor to use when executing the given method.int
getOrder()
Get the order value of this object.invoke
(MethodInvocation invocation) Intercept the given method invocation, submit the actual calling of the method to the correct task executor and return immediately to the caller.Methods inherited from class org.springframework.aop.interceptor.AsyncExecutionAspectSupport
configure, determineAsyncExecutor, doSubmit, findQualifiedExecutor, handleError, setBeanFactory, setExceptionHandler, setExecutor
-
Constructor Details
-
AsyncExecutionInterceptor
Create a new instance with a defaultAsyncUncaughtExceptionHandler
.- Parameters:
defaultExecutor
- theExecutor
(typically a SpringAsyncTaskExecutor
orExecutorService
) to delegate to; a local executor for this interceptor will be built otherwise
-
AsyncExecutionInterceptor
public AsyncExecutionInterceptor(@Nullable Executor defaultExecutor, AsyncUncaughtExceptionHandler exceptionHandler) Create a newAsyncExecutionInterceptor
.- Parameters:
defaultExecutor
- theExecutor
(typically a SpringAsyncTaskExecutor
orExecutorService
) to delegate to; a local executor for this interceptor will be built otherwiseexceptionHandler
- theAsyncUncaughtExceptionHandler
to use
-
-
Method Details
-
invoke
Intercept the given method invocation, submit the actual calling of the method to the correct task executor and return immediately to the caller.- Specified by:
invoke
in interfaceMethodInterceptor
- Parameters:
invocation
- the method to intercept and make asynchronous- Returns:
Future
if the original method returnsFuture
;null
otherwise.- Throws:
Throwable
- if the interceptors or the target object throws an exception
-
getExecutorQualifier
Get the qualifier for a specific executor to use when executing the given method.The default implementation of this method is effectively a no-op.
Subclasses may override this method to provide support for extracting qualifier information — for example, via an annotation on the given method.
- Specified by:
getExecutorQualifier
in classAsyncExecutionAspectSupport
- Parameters:
method
- the method to inspect for executor qualifier metadata- Returns:
- always
null
- Since:
- 3.1.2
- See Also:
-
getDefaultExecutor
This implementation searches for a uniqueTaskExecutor
bean in the context, or for anExecutor
bean named "taskExecutor" otherwise. If neither of the two is resolvable (e.g. if noBeanFactory
was configured at all), this implementation falls back to a newly createdSimpleAsyncTaskExecutor
instance for local use if no default could be found.- Overrides:
getDefaultExecutor
in classAsyncExecutionAspectSupport
- Parameters:
beanFactory
- the BeanFactory to use for a default executor lookup- Returns:
- the default executor, or
null
if none available - See Also:
-
getOrder
public int getOrder()Description copied from interface:Ordered
Get the order value of this object.Higher values are interpreted as lower priority. As a consequence, the object with the lowest value has the highest priority (somewhat analogous to Servlet
load-on-startup
values).Same order values will result in arbitrary sort positions for the affected objects.
-