Clear by-type cache in case of no pre-existing bean definition as well
Closes gh-24852
This commit is contained in:
parent
151a18d691
commit
a70ad0094f
|
@ -977,6 +977,9 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
|
||||||
if (existingDefinition != null || containsSingleton(beanName)) {
|
if (existingDefinition != null || containsSingleton(beanName)) {
|
||||||
resetBeanDefinition(beanName);
|
resetBeanDefinition(beanName);
|
||||||
}
|
}
|
||||||
|
else if (isConfigurationFrozen()) {
|
||||||
|
clearByTypeCache();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1430,6 +1430,29 @@ class DefaultListableBeanFactoryTests {
|
||||||
lbf.getBean(TestBean.class));
|
lbf.getBean(TestBean.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getBeanByTypeWithLateRegistration() {
|
||||||
|
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||||
|
assertThatExceptionOfType(NoSuchBeanDefinitionException.class).isThrownBy(() ->
|
||||||
|
lbf.getBean(TestBean.class));
|
||||||
|
RootBeanDefinition bd1 = new RootBeanDefinition(TestBean.class);
|
||||||
|
lbf.registerBeanDefinition("bd1", bd1);
|
||||||
|
TestBean bean = lbf.getBean(TestBean.class);
|
||||||
|
assertThat(bean.getBeanName()).isEqualTo("bd1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getBeanByTypeWithLateRegistrationAgainstFrozen() {
|
||||||
|
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||||
|
lbf.freezeConfiguration();
|
||||||
|
assertThatExceptionOfType(NoSuchBeanDefinitionException.class).isThrownBy(() ->
|
||||||
|
lbf.getBean(TestBean.class));
|
||||||
|
RootBeanDefinition bd1 = new RootBeanDefinition(TestBean.class);
|
||||||
|
lbf.registerBeanDefinition("bd1", bd1);
|
||||||
|
TestBean bean = lbf.getBean(TestBean.class);
|
||||||
|
assertThat(bean.getBeanName()).isEqualTo("bd1");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void getBeanByTypeDefinedInParent() {
|
void getBeanByTypeDefinedInParent() {
|
||||||
DefaultListableBeanFactory parent = new DefaultListableBeanFactory();
|
DefaultListableBeanFactory parent = new DefaultListableBeanFactory();
|
||||||
|
|
Loading…
Reference in New Issue