From 25877b3d6e850c2662c3ab0f6ec2bb10c34a8f22 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Tue, 28 Nov 2017 14:28:38 -0500 Subject: [PATCH] StreamListenerAnnotationBeanPostProcessor refactoring/polishing Continue the work started in f53ff9585abcec5cf80be6cadc30cf25246e004e - simplified 'isDeclarativeMethodParameter(..) operation of StreamListenerAnnotationBeanPostProcessor - aligned MessageChannelToInputFluxParameterAdapter and MessageChannelToInputObservableParameterAdapter around the actual Message --- ...ageChannelToInputFluxParameterAdapter.java | 2 +- ...nnelToInputObservableParameterAdapter.java | 3 ++- ...amListenerAnnotationBeanPostProcessor.java | 19 ++++--------------- 3 files changed, 7 insertions(+), 17 deletions(-) diff --git a/spring-cloud-stream-reactive/src/main/java/org/springframework/cloud/stream/reactive/MessageChannelToInputFluxParameterAdapter.java b/spring-cloud-stream-reactive/src/main/java/org/springframework/cloud/stream/reactive/MessageChannelToInputFluxParameterAdapter.java index 87ab471e9..ad151fd22 100644 --- a/spring-cloud-stream-reactive/src/main/java/org/springframework/cloud/stream/reactive/MessageChannelToInputFluxParameterAdapter.java +++ b/spring-cloud-stream-reactive/src/main/java/org/springframework/cloud/stream/reactive/MessageChannelToInputFluxParameterAdapter.java @@ -47,7 +47,7 @@ public class MessageChannelToInputFluxParameterAdapter @Override public boolean supports(Class bindingTargetType, MethodParameter methodParameter) { - return SubscribableChannel.class.isAssignableFrom(bindingTargetType) + return MessageChannel.class.isAssignableFrom(bindingTargetType) && Flux.class.isAssignableFrom(methodParameter.getParameterType()); } diff --git a/spring-cloud-stream-reactive/src/main/java/org/springframework/cloud/stream/reactive/MessageChannelToInputObservableParameterAdapter.java b/spring-cloud-stream-reactive/src/main/java/org/springframework/cloud/stream/reactive/MessageChannelToInputObservableParameterAdapter.java index c0e829476..185c0cec6 100644 --- a/spring-cloud-stream-reactive/src/main/java/org/springframework/cloud/stream/reactive/MessageChannelToInputObservableParameterAdapter.java +++ b/spring-cloud-stream-reactive/src/main/java/org/springframework/cloud/stream/reactive/MessageChannelToInputObservableParameterAdapter.java @@ -41,8 +41,9 @@ public class MessageChannelToInputObservableParameterAdapter this.messageChannelToInputFluxArgumentAdapter = messageChannelToInputFluxArgumentAdapter; } + @Override public boolean supports(Class bindingTargetType, MethodParameter methodParameter) { - return SubscribableChannel.class.isAssignableFrom(bindingTargetType) + return MessageChannel.class.isAssignableFrom(bindingTargetType) && Observable.class.isAssignableFrom(methodParameter.getParameterType()); } diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/StreamListenerAnnotationBeanPostProcessor.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/StreamListenerAnnotationBeanPostProcessor.java index 965c0e2a6..2caf3df51 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/StreamListenerAnnotationBeanPostProcessor.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/StreamListenerAnnotationBeanPostProcessor.java @@ -27,7 +27,6 @@ import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.BeanInitializationException; -import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.SmartInitializingSingleton; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanExpressionContext; @@ -213,29 +212,19 @@ public class StreamListenerAnnotationBeanPostProcessor } private boolean isDeclarativeMethodParameter(String targetBeanName, MethodParameter methodParameter) { - try { + if (this.applicationContext.containsBean(targetBeanName)) { Class targetBeanClass = this.applicationContext.getType(targetBeanName); if (!methodParameter.getParameterType().equals(Object.class) - && (targetBeanClass.isAssignableFrom(methodParameter.getParameterType()) || - methodParameter.getParameterType().isAssignableFrom(targetBeanClass))) { + && (methodParameter.getParameterType().isAssignableFrom(targetBeanClass) || targetBeanClass.isAssignableFrom(methodParameter.getParameterType()))) { return true; } - } - catch (NoSuchBeanDefinitionException e) { - // ignore as the bean definition might not exist yet. - } - if (!this.streamListenerParameterAdapters.isEmpty()) { - try { - Object targetBean = this.applicationContext.getBean(targetBeanName); + else if (!this.streamListenerParameterAdapters.isEmpty()) { for (StreamListenerParameterAdapter streamListenerParameterAdapter : this.streamListenerParameterAdapters) { - if (streamListenerParameterAdapter.supports(targetBean.getClass(), methodParameter)) { + if (streamListenerParameterAdapter.supports(targetBeanClass, methodParameter)) { return true; } } } - catch (BeansException e) { - // ignore as the bean definition might not exist yet. - } } return false; }