Source:
protected void registerHandlerMethodOnListenedChannel(Method method, StreamListener streamListener, Object bean) { Method targetMethod = checkProxy(method, bean); Assert.hasText(streamListener.value(), "The binding name cannot be null"); final InvocableHandlerMethod invocableHandlerMethod = this.messageHandlerMethodFactory .createInvocableHandlerMethod(bean, targetMethod); if (!StringUtils.hasText(streamListener.value())) { throw new BeanInitializationException("A bound component name must be specified"); } if (this.mappedBindings.containsKey(streamListener.value())) { throw new BeanInitializationException("Duplicate @" + StreamListener.class.getSimpleName() + " mapping for '" + streamListener.value() + "' on " + invocableHandlerMethod.getShortLogMessage() + " already existing for " + this.mappedBindings.get(streamListener.value()).getShortLogMessage()); } this.mappedBindings.put(streamListener.value(), invocableHandlerMethod); SubscribableChannel channel = this.applicationContext.getBean(streamListener.value(), SubscribableChannel.class); final String defaultOutputChannel = StreamListenerMethodUtils.getOutboundBindingTargetName(method); if (invocableHandlerMethod.isVoid()) { Assert.isTrue(StringUtils.isEmpty(defaultOutputChannel), "An output channel cannot be specified for a method that " + "does not return a value"); } else { Assert.isTrue(!StringUtils.isEmpty(defaultOutputChannel), "An output channel must be specified for a method that " + "can return a value"); } StreamListenerMethodUtils.validateStreamListenerMessageHandler(method); StreamListenerMessageHandler handler = new StreamListenerMessageHandler(invocableHandlerMethod); handler.setApplicationContext(this.applicationContext); handler.setChannelResolver(this.binderAwareChannelResolver); if (!StringUtils.isEmpty(defaultOutputChannel)) { handler.setOutputChannelName(defaultOutputChannel); } handler.afterPropertiesSet(); channel.subscribe(handler); }

Target:
protected void registerHandlerMethodOnListenedChannel(Method method, StreamListener streamListener, Object bean) { Method targetMethod = checkProxy(method, bean); Assert.hasText(streamListener.value(), "The binding name cannot be null"); final InvocableHandlerMethod invocableHandlerMethod = this.messageHandlerMethodFactory .createInvocableHandlerMethod(bean, targetMethod); if (!StringUtils.hasText(streamListener.value())) { throw new BeanInitializationException("A bound component name must be specified"); } if (this.mappedBindings.containsKey(streamListener.value())) { throw new BeanInitializationException("Duplicate @" + StreamListener.class.getSimpleName() + " mapping for '" + streamListener.value() + "' on " + invocableHandlerMethod.getShortLogMessage() + " already existing for " + this.mappedBindings.get(streamListener.value()).getShortLogMessage()); } this.mappedBindings.put(streamListener.value(), invocableHandlerMethod); SubscribableChannel channel = this.applicationContext.getBean(streamListener.value(), SubscribableChannel.class); final String defaultOutputChannel = StreamListenerMethodUtils.getOutboundBindingTargetName(method); if (invocableHandlerMethod.isVoid()) { Assert.isTrue(StringUtils.isEmpty(defaultOutputChannel), "An output channel cannot be specified for a method that does not return a value"); } else { Assert.isTrue(!StringUtils.isEmpty(defaultOutputChannel), "An output channel must be specified for a method that can return a value"); } StreamListenerMethodUtils.validateStreamListenerMessageHandler(method); StreamListenerMessageHandler handler = new StreamListenerMessageHandler(invocableHandlerMethod); handler.setApplicationContext(this.applicationContext); handler.setChannelResolver(this.binderAwareChannelResolver); if (!StringUtils.isEmpty(defaultOutputChannel)) { handler.setOutputChannelName(defaultOutputChannel); } handler.afterPropertiesSet(); channel.subscribe(handler); }