Class AnnotationAsyncExecutionInterceptor

All Implemented Interfaces:
Advice, Interceptor, MethodInterceptor, Aware, BeanFactoryAware, Ordered

public class AnnotationAsyncExecutionInterceptor extends AsyncExecutionInterceptor
Specialization of AsyncExecutionInterceptor that delegates method execution to an Executor based on the Async annotation.

Specifically designed to support use of the Async.value() executor qualifier mechanism.

Supports detecting qualifier metadata via @Async at the method or declaring class level. See getExecutorQualifier(Method) for details.

Since:
3.1.2
Author:
Chris Beams, Stephane Nicoll
See Also:
  • Constructor Details

    • AnnotationAsyncExecutionInterceptor

      public AnnotationAsyncExecutionInterceptor(@Nullable Executor defaultExecutor)
      Create a new AnnotationAsyncExecutionInterceptor with the given executor and a simple AsyncUncaughtExceptionHandler.
      Parameters:
      defaultExecutor - the executor to be used by default if no more specific executor has been qualified at the method level using Async.value(); a local executor for this interceptor will be built otherwise
    • AnnotationAsyncExecutionInterceptor

      public AnnotationAsyncExecutionInterceptor(@Nullable Executor defaultExecutor, AsyncUncaughtExceptionHandler exceptionHandler)
      Create a new AnnotationAsyncExecutionInterceptor with the given executor.
      Parameters:
      defaultExecutor - the executor to be used by default if no more specific executor has been qualified at the method level using Async.value(); a local executor for this interceptor will be built otherwise
      exceptionHandler - the AsyncUncaughtExceptionHandler to use to handle exceptions thrown by asynchronous method executions with void return type
  • Method Details

    • getExecutorQualifier

      protected @Nullable String getExecutorQualifier(Method method)
      Return the qualifier or bean name of the executor to be used when executing the given method, specified via Async.value() at the method or declaring class level. If @Async is specified at both the method and class level, the method's value takes precedence (even if empty string, indicating that the default executor should be used preferentially).
      Overrides:
      getExecutorQualifier in class AsyncExecutionInterceptor
      Parameters:
      method - the method to inspect for executor qualifier metadata
      Returns:
      the qualifier if specified, otherwise an empty string indicating that the default executor should be used
      See Also: