diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/BindingBeansRegistrar.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/BindingBeansRegistrar.java index 900896e65..eb5046de6 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/BindingBeansRegistrar.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/BindingBeansRegistrar.java @@ -23,9 +23,10 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.binding.BindingBeanDefinitionRegistryUtils; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; +import org.springframework.core.annotation.AnnotatedElementUtils; +import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.type.AnnotationMetadata; import org.springframework.util.ClassUtils; -import org.springframework.util.MultiValueMap; /** * @author Marius Bogoevici @@ -37,23 +38,23 @@ public class BindingBeansRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) { - MultiValueMap attributes = metadata.getAllAnnotationAttributes(EnableBinding.class.getName(), - false); - for (Class type : collectClasses(attributes.get("value"))) { - BindingBeanDefinitionRegistryUtils.registerChannelBeanDefinitions(type, type.getName(), registry); + AnnotationAttributes attrs = AnnotatedElementUtils.getMergedAnnotationAttributes( + ClassUtils.resolveClassName(metadata.getClassName(), null), + EnableBinding.class); + for (Class type : collectClasses(attrs.get("value"))) { + BindingBeanDefinitionRegistryUtils.registerChannelBeanDefinitions(type, + type.getName(), registry); BindingBeanDefinitionRegistryUtils.registerChannelsQualifiedBeanDefinitions( ClassUtils.resolveClassName(metadata.getClassName(), null), type, registry); } } - private List> collectClasses(List list) { + private List> collectClasses(Object object) { ArrayList> result = new ArrayList>(); - for (Object object : list) { - for (Object value : (Object[]) object) { - if (value instanceof Class && void.class != value) { - result.add((Class) value); - } + for (Object value : (Object[]) object) { + if (value instanceof Class && void.class != value) { + result.add((Class) value); } } return result;