@Target(value={TYPE,METHOD}) @Retention(value=RUNTIME) @Documented public @interface Async
Can also be used at the type level, in which case all the type's methods are
 considered as asynchronous. Note, however, that @Async is not supported
 on methods declared within a
 @Configuration class.
 
In terms of target method signatures, any parameter types are supported.
 However, the return type is constrained to either void or
 Future. In the latter case, you may declare the
 more specific ListenableFuture or
 CompletableFuture types which allow for richer
 interaction with the asynchronous task and for immediate composition with
 further processing steps.
 
A 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 a value
 through: e.g. Spring's AsyncResult, EJB 3.1's AsyncResult,
 or CompletableFuture.completedFuture(Object).
AnnotationAsyncExecutionInterceptor, 
AsyncAnnotationAdvisorpublic abstract String value
May be used to determine the target executor to be used when executing
 the asynchronous operation(s), matching the qualifier value (or the bean
 name) of a specific Executor or
 TaskExecutor
 bean definition.
 
When specified on a class-level @Async annotation, indicates that the
 given executor should be used for all methods within the class. Method-level use
 of Async#value always overrides any value set at the class level.