From 44afed426aaf5a78bcc41e11873d42f5fde73210 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 9 Oct 2018 23:14:19 +0200 Subject: [PATCH] ObjectProvider stream consistently includes beans from parent context Issue: SPR-17356 --- .../org/springframework/beans/factory/BeanFactory.java | 6 +++--- .../beans/factory/support/DefaultListableBeanFactory.java | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/BeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/BeanFactory.java index dc8cdef1a27..39b160e15f2 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/BeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/BeanFactory.java @@ -225,12 +225,12 @@ public interface BeanFactory { * Note that collection types are not supported here, in contrast to reflective * injection points. For programmatically retrieving a list of beans matching a * specific type, specify the actual bean type as an argument here and subsequently - * use {@link ObjectProvider#toList()} or its lazy streaming/iteration options. + * use {@link ObjectProvider#orderedStream()} or its lazy streaming/iteration options. * @return a corresponding provider handle * @since 5.1 - * @see ObjectProvider#stream() * @see ObjectProvider#iterator() - * @see ObjectProvider#toList() + * @see ObjectProvider#stream() + * @see ObjectProvider#orderedStream() */ ObjectProvider getBeanProvider(ResolvableType requiredType); diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java index 9bd153dc243..7ed5704bd16 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java @@ -382,13 +382,13 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto } @Override public Stream stream() { - return Arrays.stream(getBeanNamesForType(requiredType)) + return Arrays.stream(getBeanNamesForTypedStream(requiredType)) .map(name -> (T) getBean(name)) .filter(bean -> !(bean instanceof NullBean)); } @Override public Stream orderedStream() { - String[] beanNames = getBeanNamesForType(requiredType); + String[] beanNames = getBeanNamesForTypedStream(requiredType); Map matchingBeans = new LinkedHashMap<>(beanNames.length); for (String beanName : beanNames) { Object beanInstance = getBean(beanName); @@ -424,6 +424,10 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto return null; } + private String[] getBeanNamesForTypedStream(ResolvableType requiredType) { + return BeanFactoryUtils.beanNamesForTypeIncludingAncestors(this, requiredType); + } + //--------------------------------------------------------------------- // Implementation of ListableBeanFactory interface