Skip to content

Commit 77d72f1

Browse files
committed
Injected Map/Collection does not include null bean entries
Issue: SPR-17034
1 parent faef363 commit 77d72f1

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1318,7 +1318,13 @@ protected Map<String, Object> findAutowireCandidates(
13181318
private void addCandidateEntry(Map<String, Object> candidates, String candidateName,
13191319
DependencyDescriptor descriptor, Class<?> requiredType) {
13201320

1321-
if (descriptor instanceof MultiElementDescriptor || containsSingleton(candidateName)) {
1321+
if (descriptor instanceof MultiElementDescriptor) {
1322+
Object beanInstance = descriptor.resolveCandidate(candidateName, requiredType, this);
1323+
if (!(beanInstance instanceof NullBean)) {
1324+
candidates.put(candidateName, beanInstance);
1325+
}
1326+
}
1327+
else if (containsSingleton(candidateName)) {
13221328
Object beanInstance = descriptor.resolveCandidate(candidateName, requiredType, this);
13231329
candidates.put(candidateName, (beanInstance instanceof NullBean ? null : beanInstance));
13241330
}

spring-beans/src/test/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessorTests.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -728,9 +728,8 @@ public void testConstructorResourceInjectionWithCollectionAndNullFromFactoryBean
728728
ConstructorsCollectionResourceInjectionBean bean = (ConstructorsCollectionResourceInjectionBean) bf.getBean("annotatedBean");
729729
assertNull(bean.getTestBean3());
730730
assertSame(tb, bean.getTestBean4());
731-
assertEquals(2, bean.getNestedTestBeans().size());
732-
assertNull(bean.getNestedTestBeans().get(0));
733-
assertSame(ntb2, bean.getNestedTestBeans().get(1));
731+
assertEquals(1, bean.getNestedTestBeans().size());
732+
assertSame(ntb2, bean.getNestedTestBeans().get(0));
734733

735734
Map<String, NestedTestBean> map = bf.getBeansOfType(NestedTestBean.class);
736735
assertNull(map.get("nestedTestBean1"));
@@ -924,12 +923,12 @@ public void testConstructorInjectionWithMap() {
924923
bf.registerBeanDefinition("testBean2", tb2);
925924

926925
MapConstructorInjectionBean bean = (MapConstructorInjectionBean) bf.getBean("annotatedBean");
927-
assertEquals(2, bean.getTestBeanMap().size());
926+
assertEquals(1, bean.getTestBeanMap().size());
928927
assertSame(tb1, bean.getTestBeanMap().get("testBean1"));
929928
assertNull(bean.getTestBeanMap().get("testBean2"));
930929

931930
bean = (MapConstructorInjectionBean) bf.getBean("annotatedBean");
932-
assertEquals(2, bean.getTestBeanMap().size());
931+
assertEquals(1, bean.getTestBeanMap().size());
933932
assertSame(tb1, bean.getTestBeanMap().get("testBean1"));
934933
assertNull(bean.getTestBeanMap().get("testBean2"));
935934
}

0 commit comments

Comments
 (0)