From bb2f78cb3650b20818f97fe9d06bc9b3cfb4aa7e Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Mon, 1 Apr 2019 14:59:26 +0100 Subject: [PATCH] Use Binder directly instead of relying on CPBPP Fizes gh-351 a bit more thoroughly --- .../FunctionProxyApplicationListener.java | 31 +++++-------------- 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/spring-cloud-function-compiler/src/main/java/org/springframework/cloud/function/compiler/config/FunctionProxyApplicationListener.java b/spring-cloud-function-compiler/src/main/java/org/springframework/cloud/function/compiler/config/FunctionProxyApplicationListener.java index e4bd70bb0..47540bd55 100644 --- a/spring-cloud-function-compiler/src/main/java/org/springframework/cloud/function/compiler/config/FunctionProxyApplicationListener.java +++ b/spring-cloud-function-compiler/src/main/java/org/springframework/cloud/function/compiler/config/FunctionProxyApplicationListener.java @@ -24,9 +24,9 @@ import org.springframework.beans.factory.config.ConstructorArgumentValues; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.boot.context.event.ApplicationPreparedEvent; -import org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor; +import org.springframework.boot.context.properties.bind.Bindable; +import org.springframework.boot.context.properties.bind.Binder; import org.springframework.cloud.function.compiler.ConsumerCompiler; import org.springframework.cloud.function.compiler.FunctionCompiler; import org.springframework.cloud.function.compiler.SupplierCompiler; @@ -38,7 +38,6 @@ import org.springframework.cloud.function.compiler.proxy.LambdaCompilingFunction import org.springframework.cloud.function.compiler.proxy.LambdaCompilingSupplier; import org.springframework.context.ApplicationListener; import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.support.StaticApplicationContext; import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.Resource; import org.springframework.util.Assert; @@ -85,7 +84,7 @@ public class FunctionProxyApplicationListener ConfigurableApplicationContext context = event.getApplicationContext(); DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) context .getBeanFactory(); - bind(context); + bind(context, beanFactory); for (Map.Entry entry : this.compile.entrySet()) { String name = entry.getKey(); @SuppressWarnings("unchecked") @@ -116,26 +115,10 @@ public class FunctionProxyApplicationListener } } - private void bind(ConfigurableApplicationContext context) { - ConfigurationPropertiesBindingPostProcessor post = new ConfigurationPropertiesBindingPostProcessor(); - maybeSetBeanFactory(context, post); - try { - post.afterPropertiesSet(); - } - catch (Exception e) { - throw new IllegalStateException("Cannot bind properties", e); - } - post.postProcessBeforeInitialization(this, getClass().getName()); - } - - private void maybeSetBeanFactory(ConfigurableApplicationContext context, - ConfigurationPropertiesBindingPostProcessor post) { - StaticApplicationContext other = new StaticApplicationContext(); - other.setEnvironment(context.getEnvironment()); - other.registerSingleton(ConfigurationBeanFactoryMetadata.class.getName(), - ConfigurationBeanFactoryMetadata.class); - other.setParent(context); - post.setApplicationContext(other); + private void bind(ConfigurableApplicationContext application, + DefaultListableBeanFactory context) { + Binder.get(application.getEnvironment()).bind("spring.cloud.function", + Bindable.ofInstance(this)); } private void registerByteCodeLoadingProxy(String name, String type, Resource resource,