From a0769997ab14531f7e64c937388b34e206f41463 Mon Sep 17 00:00:00 2001 From: "Bao.Ngo" Date: Mon, 25 Nov 2024 21:08:43 +0700 Subject: [PATCH] Fix wrong return type when invoking Async-annotated --- .../aop/interceptor/AsyncExecutionInterceptor.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionInterceptor.java b/spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionInterceptor.java index 933375922447..7ea44b90e6cf 100644 --- a/spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionInterceptor.java +++ b/spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionInterceptor.java @@ -17,6 +17,7 @@ package org.springframework.aop.interceptor; import java.lang.reflect.Method; +import java.lang.reflect.Modifier; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor; @@ -125,7 +126,16 @@ public Object invoke(final MethodInvocation invocation) throws Throwable { return null; }; - return doSubmit(task, executor, invocation.getMethod().getReturnType()); + return doSubmit( task, executor, determineReturnType( invocation, userMethod ) ); + } + + private static Class determineReturnType(MethodInvocation invocation, Method userMethod) { + Method originalMethod = invocation.getMethod(); + if( Modifier.isAbstract( originalMethod.getModifiers() ) ) { + return userMethod.getReturnType(); + } + + return originalMethod.getReturnType(); } /**