Don't consider singleton instances when deducing bean class
Update `RegisteredBean` bean class detection to not consider singletons. Prior to this commit, any beans that had been instantiated could return the wrong class, especially if they were implemented using a lambda. See gh-28414
This commit is contained in:
@@ -21,6 +21,7 @@ import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
|
||||
import org.springframework.beans.factory.config.BeanDefinitionHolder;
|
||||
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
||||
@@ -112,12 +113,6 @@ class RegisteredBeanTests {
|
||||
assertThat(registeredBean.getBeanClass()).isEqualTo(TestBean.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
void getBeanClassWhenSingletonReturnsBeanClass() {
|
||||
RegisteredBean registeredBean = RegisteredBean.of(this.beanFactory, "sb");
|
||||
assertThat(registeredBean.getBeanClass()).isEqualTo(TestBean.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
void getBeanTypeReturnsBeanType() {
|
||||
RegisteredBean registeredBean = RegisteredBean.of(this.beanFactory, "bd");
|
||||
@@ -125,9 +120,16 @@ class RegisteredBeanTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void getBeanTypeWhenSingletonReturnsBeanType() {
|
||||
RegisteredBean registeredBean = RegisteredBean.of(this.beanFactory, "sb");
|
||||
assertThat(registeredBean.getBeanType().toClass()).isEqualTo(TestBean.class);
|
||||
void getBeanTypeWhenHasInstanceBackedByLambdaDoesNotReturnLambdaType() {
|
||||
this.beanFactory.registerBeanDefinition("bfpp", new RootBeanDefinition(
|
||||
BeanFactoryPostProcessor.class, RegisteredBeanTests::getBeanFactoryPostProcessorLambda));
|
||||
this.beanFactory.getBean("bfpp");
|
||||
RegisteredBean registeredBean = RegisteredBean.of(this.beanFactory, "bfpp");
|
||||
assertThat(registeredBean.getBeanType().toClass()).isEqualTo(BeanFactoryPostProcessor.class);
|
||||
}
|
||||
|
||||
static BeanFactoryPostProcessor getBeanFactoryPostProcessorLambda() {
|
||||
return bf -> {};
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user