GH-1246 Fix logic around getting parameter names from 'factory method'

Changed condition to ensure we use method name when iterating thru methods instead of validating if it is a 'factory method'

Resolves #1246
This commit is contained in:
Oleg Zhurakousky
2025-03-24 23:01:26 +01:00
parent 6c3505d5da
commit 2db95c7286
2 changed files with 9 additions and 3 deletions

View File

@@ -378,7 +378,7 @@ public final class FunctionTypeUtils {
}
ResolvableType resolvableFunctionType = ResolvableType.forType(functionType);
ResolvableType resolvableInputType;
if (FunctionTypeUtils.isFunction(functionType)) {
resolvableInputType = resolvableFunctionType.as(Function.class);

View File

@@ -85,12 +85,18 @@ public abstract class FunctionContextUtils {
return param;
}
@Deprecated(since = "4.2.3", forRemoval = true)
public static Class<?>[] getParamTypesFromBeanDefinitionFactory(Class<?> factory,
AbstractBeanDefinition definition) {
return getParamTypesFromBeanDefinitionFactory(factory, definition, null);
}
public static Class<?>[] getParamTypesFromBeanDefinitionFactory(Class<?> factory,
AbstractBeanDefinition definition, String methodName) {
if (definition instanceof RootBeanDefinition) {
RootBeanDefinition root = (RootBeanDefinition) definition;
for (Method method : getCandidateMethods(factory, root)) {
if (root.isFactoryMethod(method)) {
if (method.getName().equals(methodName)) {
return method.getParameterTypes();
}
}
@@ -114,7 +120,7 @@ public abstract class FunctionContextUtils {
private static Type findBeanType(AbstractBeanDefinition definition, String declaringClassName, String methodName) {
Class<?> factory = ClassUtils.resolveClassName(declaringClassName, null);
Class<?>[] params = getParamTypesFromBeanDefinitionFactory(factory, definition);
Class<?>[] params = getParamTypesFromBeanDefinitionFactory(factory, definition, methodName);
Method method = ReflectionUtils.findMethod(factory, methodName,
params);
Type type = method.getGenericReturnType();