Skip to content

Commit 45a270b

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

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
@@ -942,6 +942,9 @@ else if (!beanDefinition.equals(existingDefinition)) {
942942
if (existingDefinition != null || containsSingleton(beanName)) {
943943
resetBeanDefinition(beanName);
944944
}
945+
else if (isConfigurationFrozen()) {
946+
clearByTypeCache();
947+
}
945948
}
946949

947950
@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
@@ -1399,6 +1399,39 @@ public void testGetBeanByTypeWithNoneFound() {
13991399
lbf.getBean(TestBean.class);
14001400
}
14011401

1402+
@Test
1403+
public void testGetBeanByTypeWithLateRegistration() {
1404+
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
1405+
try {
1406+
lbf.getBean(TestBean.class);
1407+
fail("Should have thrown NoSuchBeanDefinitionException");
1408+
}
1409+
catch (NoSuchBeanDefinitionException ex) {
1410+
// expected
1411+
}
1412+
RootBeanDefinition bd1 = new RootBeanDefinition(TestBean.class);
1413+
lbf.registerBeanDefinition("bd1", bd1);
1414+
TestBean bean = lbf.getBean(TestBean.class);
1415+
assertThat(bean.getBeanName(), equalTo("bd1"));
1416+
}
1417+
1418+
@Test
1419+
public void testGetBeanByTypeWithLateRegistrationAgainstFrozen() {
1420+
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
1421+
lbf.freezeConfiguration();
1422+
try {
1423+
lbf.getBean(TestBean.class);
1424+
fail("Should have thrown NoSuchBeanDefinitionException");
1425+
}
1426+
catch (NoSuchBeanDefinitionException ex) {
1427+
// expected
1428+
}
1429+
RootBeanDefinition bd1 = new RootBeanDefinition(TestBean.class);
1430+
lbf.registerBeanDefinition("bd1", bd1);
1431+
TestBean bean = lbf.getBean(TestBean.class);
1432+
assertThat(bean.getBeanName(), equalTo("bd1"));
1433+
}
1434+
14021435
@Test
14031436
public void testGetBeanByTypeDefinedInParent() {
14041437
DefaultListableBeanFactory parent = new DefaultListableBeanFactory();

0 commit comments

Comments
 (0)