diff --git a/spring-test/src/main/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideProcessor.java b/spring-test/src/main/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideProcessor.java index 457acf75c1..71c6dc4787 100644 --- a/spring-test/src/main/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideProcessor.java +++ b/spring-test/src/main/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideProcessor.java @@ -22,7 +22,6 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.ArrayList; -import java.util.Arrays; import java.util.LinkedHashSet; import java.util.List; import java.util.Objects; @@ -37,6 +36,7 @@ import org.springframework.test.context.bean.override.BeanOverrideStrategy; import org.springframework.test.context.bean.override.OverrideMetadata; import org.springframework.util.Assert; import org.springframework.util.ReflectionUtils; +import org.springframework.util.ReflectionUtils.MethodFilter; import org.springframework.util.StringUtils; /** @@ -84,18 +84,13 @@ class TestBeanOverrideProcessor implements BeanOverrideProcessor { static Method findTestBeanFactoryMethod(Class clazz, Class methodReturnType, List methodNames) { Assert.notEmpty(methodNames, "At least one candidate method name is required"); Set supportedNames = new LinkedHashSet<>(methodNames); - List methods = Arrays.stream(ReflectionUtils.getAllDeclaredMethods(clazz)) - .filter(method -> Modifier.isStatic(method.getModifiers()) && - supportedNames.contains(method.getName()) && - methodReturnType.isAssignableFrom(method.getReturnType())) - .toList(); + MethodFilter methodFilter = method -> (Modifier.isStatic(method.getModifiers()) && + supportedNames.contains(method.getName()) && + methodReturnType.isAssignableFrom(method.getReturnType())); + List methods = findMethods(clazz, methodFilter); if (methods.isEmpty() && TestContextAnnotationUtils.searchEnclosingClass(clazz)) { - methods = Arrays.stream(ReflectionUtils.getAllDeclaredMethods(clazz.getEnclosingClass())) - .filter(method -> Modifier.isStatic(method.getModifiers()) && - supportedNames.contains(method.getName()) && - methodReturnType.isAssignableFrom(method.getReturnType())) - .toList(); + methods = findMethods(clazz.getEnclosingClass(), methodFilter); } Assert.state(!methods.isEmpty(), () -> """ @@ -143,6 +138,13 @@ class TestBeanOverrideProcessor implements BeanOverrideProcessor { } + private static List findMethods(Class clazz, MethodFilter methodFilter) { + List methods = new ArrayList<>(); + ReflectionUtils.doWithMethods(clazz, methods::add, methodFilter); + return methods; + } + + static final class TestBeanOverrideMetadata extends OverrideMetadata { private final Method overrideMethod;