Browse Source

Clear by-type cache in case of no pre-existing bean definition as well

Closes gh-24852
pull/24864/head
Juergen Hoeller 6 years ago
parent
commit
a70ad0094f
  1. 3
      spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java
  2. 23
      spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java

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

@ -977,6 +977,9 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto @@ -977,6 +977,9 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
if (existingDefinition != null || containsSingleton(beanName)) {
resetBeanDefinition(beanName);
}
else if (isConfigurationFrozen()) {
clearByTypeCache();
}
}
@Override

23
spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java

@ -1430,6 +1430,29 @@ class DefaultListableBeanFactoryTests { @@ -1430,6 +1430,29 @@ class DefaultListableBeanFactoryTests {
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
void getBeanByTypeDefinedInParent() {
DefaultListableBeanFactory parent = new DefaultListableBeanFactory();

Loading…
Cancel
Save