Skip to content

Commit 56e7d73

Browse files
committed
Clear by-type cache in case of no pre-existing bean definition as well
Closes gh-24852
1 parent 11aaf6a commit 56e7d73

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -856,6 +856,9 @@ else if (!beanDefinition.equals(existingDefinition)) {
856856
if (existingDefinition != null || containsSingleton(beanName)) {
857857
resetBeanDefinition(beanName);
858858
}
859+
else if (isConfigurationFrozen()) {
860+
clearByTypeCache();
861+
}
859862
}
860863

861864
@Override

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1426,6 +1426,39 @@ public void testGetBeanByTypeWithNoneFound() {
14261426
lbf.getBean(TestBean.class);
14271427
}
14281428

1429+
@Test
1430+
public void testGetBeanByTypeWithLateRegistration() {
1431+
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
1432+
try {
1433+
lbf.getBean(TestBean.class);
1434+
fail("Should have thrown NoSuchBeanDefinitionException");
1435+
}
1436+
catch (NoSuchBeanDefinitionException ex) {
1437+
// expected
1438+
}
1439+
RootBeanDefinition bd1 = new RootBeanDefinition(TestBean.class);
1440+
lbf.registerBeanDefinition("bd1", bd1);
1441+
TestBean bean = lbf.getBean(TestBean.class);
1442+
assertThat(bean.getBeanName(), equalTo("bd1"));
1443+
}
1444+
1445+
@Test
1446+
public void testGetBeanByTypeWithLateRegistrationAgainstFrozen() {
1447+
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
1448+
lbf.freezeConfiguration();
1449+
try {
1450+
lbf.getBean(TestBean.class);
1451+
fail("Should have thrown NoSuchBeanDefinitionException");
1452+
}
1453+
catch (NoSuchBeanDefinitionException ex) {
1454+
// expected
1455+
}
1456+
RootBeanDefinition bd1 = new RootBeanDefinition(TestBean.class);
1457+
lbf.registerBeanDefinition("bd1", bd1);
1458+
TestBean bean = lbf.getBean(TestBean.class);
1459+
assertThat(bean.getBeanName(), equalTo("bd1"));
1460+
}
1461+
14291462
@Test
14301463
public void testGetBeanByTypeDefinedInParent() {
14311464
DefaultListableBeanFactory parent = new DefaultListableBeanFactory();

0 commit comments

Comments
 (0)