Properly resolve null beans as getBeansOfType result entries

Issue: SPR-16163
This commit is contained in:
Juergen Hoeller 2017-11-06 13:27:51 +01:00
parent 2d1f87501c
commit 9649b0cb25
2 changed files with 8 additions and 1 deletions

View File

@ -505,6 +505,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
} }
@Override @Override
@SuppressWarnings("unchecked")
public <T> Map<String, T> getBeansOfType(@Nullable Class<T> type, boolean includeNonSingletons, boolean allowEagerInit) public <T> Map<String, T> getBeansOfType(@Nullable Class<T> type, boolean includeNonSingletons, boolean allowEagerInit)
throws BeansException { throws BeansException {
@ -512,7 +513,8 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
Map<String, T> result = new LinkedHashMap<>(beanNames.length); Map<String, T> result = new LinkedHashMap<>(beanNames.length);
for (String beanName : beanNames) { for (String beanName : beanNames) {
try { try {
result.put(beanName, getBean(beanName, type)); Object beanInstance = getBean(beanName);
result.put(beanName, (beanInstance instanceof NullBean ? null : (T) beanInstance));
} }
catch (BeanCreationException ex) { catch (BeanCreationException ex) {
Throwable rootCause = ex.getMostSpecificCause(); Throwable rootCause = ex.getMostSpecificCause();

View File

@ -701,6 +701,11 @@ public class AutowiredAnnotationBeanPostProcessorTests {
assertEquals(2, bean.getNestedTestBeans().size()); assertEquals(2, bean.getNestedTestBeans().size());
assertNull(bean.getNestedTestBeans().get(0)); assertNull(bean.getNestedTestBeans().get(0));
assertSame(ntb2, bean.getNestedTestBeans().get(1)); assertSame(ntb2, bean.getNestedTestBeans().get(1));
Map<String, NestedTestBean> map = bf.getBeansOfType(NestedTestBean.class);
assertNull(map.get("nestedTestBean1"));
assertSame(ntb2, map.get("nestedTestBean2"));
bf.destroySingletons(); bf.destroySingletons();
} }