Skip to content

Commit 5033b9d

Browse files
committed
Reset by-type cache for Object after registering a new singleton
Closes gh-35634
1 parent d733023 commit 5033b9d

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-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
@@ -1481,7 +1481,10 @@ protected void addSingleton(String beanName, Object singletonObject) {
14811481
@Override
14821482
public void registerSingleton(String beanName, Object singletonObject) throws IllegalStateException {
14831483
super.registerSingleton(beanName, singletonObject);
1484+
14841485
updateManualSingletonNames(set -> set.add(beanName), set -> !this.beanDefinitionMap.containsKey(beanName));
1486+
this.allBeanNamesByType.remove(Object.class);
1487+
this.singletonBeanNamesByType.remove(Object.class);
14851488
}
14861489

14871490
@Override

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
import org.springframework.core.io.UrlResource;
8888
import org.springframework.core.testfixture.io.SerializationTestUtils;
8989
import org.springframework.lang.Nullable;
90+
import org.springframework.util.StringUtils;
9091
import org.springframework.util.StringValueResolver;
9192

9293
import static org.assertj.core.api.Assertions.assertThat;
@@ -3223,6 +3224,10 @@ void mostSpecificCacheEntryForTypeMatching() {
32233224
assertThat(lbf.getBeanNamesForType(DerivedTestBean.class)).containsExactly("bd1");
32243225
assertThat(lbf.getBeanNamesForType(NestedTestBean.class)).isSameAs(nestedBeanNames);
32253226
assertThat(lbf.getBeanNamesForType(Object.class)).isSameAs(allBeanNames);
3227+
3228+
lbf.registerSingleton("bd3", new Object());
3229+
assertThat(lbf.getBeanNamesForType(NestedTestBean.class)).isSameAs(nestedBeanNames);
3230+
assertThat(lbf.getBeanNamesForType(Object.class)).containsExactly(StringUtils.addStringToArray(allBeanNames, "bd3"));
32263231
}
32273232

32283233

0 commit comments

Comments
 (0)