diff --git a/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/DefaultBinderFactory.java b/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/DefaultBinderFactory.java index a37117082..db3a5e6fc 100644 --- a/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/DefaultBinderFactory.java +++ b/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/DefaultBinderFactory.java @@ -74,6 +74,7 @@ import org.springframework.util.StringUtils; * @author Anshul Mehra * @author Chris Bono * @author Byungjun You + * @author Omer Celik */ public class DefaultBinderFactory implements BinderFactory, DisposableBean, ApplicationContextAware { @@ -323,6 +324,7 @@ public class DefaultBinderFactory implements BinderFactory, DisposableBean, Appl } binderProducingContext = this.createUnitializedContextForAOT(configurationName, binderProperties, binderConfiguration); this.binderChildContextInitializers.get(configurationName).initialize(binderProducingContext); + registerOuterContextBean(binderProperties, binderProducingContext); binderProducingContext.refresh(); } else { @@ -578,6 +580,17 @@ public class DefaultBinderFactory implements BinderFactory, DisposableBean, Appl return binderContext; } + private void registerOuterContextBean(Map binderProperties, ConfigurableApplicationContext binderProducingContext) { + ConfigurableEnvironment environment = this.context != null + ? this.context.getEnvironment() : null; + boolean useApplicationContextAsParent = binderProperties.isEmpty() + && this.context != null; + if (environment != null && !useApplicationContextAsParent) { + InitializerWithOuterContext initializer = new InitializerWithOuterContext(this.context); + initializer.initialize(binderProducingContext); + } + } + /** * Ensures that nested properties are flattened (i.e., foo.bar=baz instead of * foo={bar=baz}).