diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/async/ExecutorBeanPostProcessor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/async/ExecutorBeanPostProcessor.java index 2e001d3db..2e549697d 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/async/ExecutorBeanPostProcessor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/async/ExecutorBeanPostProcessor.java @@ -22,6 +22,7 @@ import java.lang.reflect.Modifier; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Supplier; import org.aopalliance.aop.Advice; @@ -266,14 +267,16 @@ class ExecutorBeanPostProcessor implements BeanPostProcessor { } private static boolean anyFinalMethods(T object, Class iface) { - for (Method method : ReflectionUtils.getAllDeclaredMethods(iface)) { - Method m = ReflectionUtils.findMethod(object.getClass(), method.getName(), - method.getParameterTypes()); - if (m != null && Modifier.isFinal(m.getModifiers())) { - return true; - } - } - return false; + AtomicBoolean finalMethodPresent = new AtomicBoolean(); + ReflectionUtils.doWithMethods(iface, method -> finalMethodPresent.set(true), + method -> { + Method m = ReflectionUtils.findMethod(object.getClass(), + method.getName(), method.getParameterTypes()); + return m != null && + !ReflectionUtils.isObjectMethod(m) && + Modifier.isFinal(m.getModifiers()); + }); + return finalMethodPresent.get(); } }