Skip to content

Commit 1b6a749

Browse files
committed
Resolve factoryBeanClass if necessary
Update `AbstractAutowireCapableBeanFactory.getTypeForFactoryBean` to use fallback to `determineTargetType` if the factory bean definition does not have a resolved class. This is required for the case where a `@Configuration` class is picked up via component scanning and has a bean type that has not yet been resolved. Closes spring-projectsgh-23338
1 parent 17518ec commit 1b6a749

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -858,9 +858,16 @@ protected ResolvableType getTypeForFactoryBean(String beanName,
858858
// Try to obtain the FactoryBean's object type from its factory method
859859
// declaration without instantiating the containing bean at all.
860860
BeanDefinition factoryBeanDefinition = getBeanDefinition(factoryBeanName);
861-
if (factoryBeanDefinition instanceof AbstractBeanDefinition &&
862-
((AbstractBeanDefinition) factoryBeanDefinition).hasBeanClass()) {
863-
Class<?> factoryBeanClass = ((AbstractBeanDefinition) factoryBeanDefinition).getBeanClass();
861+
Class<?> factoryBeanClass = null;
862+
if (factoryBeanDefinition instanceof AbstractBeanDefinition
863+
&& ((AbstractBeanDefinition) factoryBeanDefinition).hasBeanClass()) {
864+
factoryBeanClass = ((AbstractBeanDefinition) factoryBeanDefinition).getBeanClass();
865+
}
866+
else {
867+
RootBeanDefinition fbmbd = getMergedBeanDefinition(factoryBeanName, factoryBeanDefinition);
868+
factoryBeanClass = determineTargetType(factoryBeanName, fbmbd, new Class<?>[] { Object.class });
869+
}
870+
if (factoryBeanClass != null) {
864871
result = getTypeForFactoryBeanFromMethod(factoryBeanClass, factoryMethodName);
865872
if (result.resolve() != null) {
866873
return result;

0 commit comments

Comments
 (0)