diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/BinderFactoryConfiguration.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/BinderFactoryConfiguration.java index 2b16a16d1..c32f680ca 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/BinderFactoryConfiguration.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/BinderFactoryConfiguration.java @@ -32,6 +32,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanCreationException; +import org.springframework.beans.factory.SmartInitializingSingleton; import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; @@ -277,7 +278,10 @@ public class BinderFactoryConfiguration { private String determineFunctionName(FunctionCatalog catalog, Environment environment) { String name = environment.getProperty("spring.cloud.stream.function.definition"); - if (!StringUtils.hasText(name) && catalog.size() == 1) { + if (!StringUtils.hasText(name) && catalog.size() == 0) { + ((SmartInitializingSingleton) catalog).afterSingletonsInstantiated(); + } + if (!StringUtils.hasText(name) && catalog.size() >= 1 && catalog.size() <= 2) { name = ((FunctionInspector) catalog).getName(catalog.lookup("")); if (StringUtils.hasText(name)) { ((StandardEnvironment) environment).getSystemProperties() diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java index 966af9a64..e8606f8fe 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java @@ -20,6 +20,7 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import org.springframework.beans.factory.SmartInitializingSingleton; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -59,6 +60,7 @@ public class FunctionConfiguration { CompositeMessageConverterFactory messageConverterFactory, StreamFunctionProperties functionProperties, BindingServiceProperties bindingServiceProperties) { + ((SmartInitializingSingleton) functionCatalog).afterSingletonsInstantiated(); return new IntegrationFlowFunctionSupport(functionCatalog, functionInspector, messageConverterFactory, functionProperties, bindingServiceProperties); }