Skip to content

Commit eb81337

Browse files
committed
Clear by-type cache in case of no pre-existing bean definition as well
Closes gh-24852
1 parent 01ec5d8 commit eb81337

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
@@ -861,6 +861,9 @@ else if (!beanDefinition.equals(existingDefinition)) {
861861
if (existingDefinition != null || containsSingleton(beanName)) {
862862
resetBeanDefinition(beanName);
863863
}
864+
else if (isConfigurationFrozen()) {
865+
clearByTypeCache();
866+
}
864867
}
865868

866869
@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
@@ -1425,6 +1425,39 @@ public void testGetBeanByTypeWithNoneFound() {
14251425
lbf.getBean(TestBean.class);
14261426
}
14271427

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

0 commit comments

Comments
 (0)