From 78d25f0fc021c4e2fb821a546e89476ad37a9917 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Fri, 16 Mar 2018 13:53:59 -0400 Subject: [PATCH] Don't rebind beans with no implementation. fixes gh-337 --- .../properties/ConfigurationPropertiesRebinder.java | 10 ++++++---- ...figurationPropertiesRebinderIntegrationTests.java | 12 ++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/spring-cloud-context/src/main/java/org/springframework/cloud/context/properties/ConfigurationPropertiesRebinder.java b/spring-cloud-context/src/main/java/org/springframework/cloud/context/properties/ConfigurationPropertiesRebinder.java index 6d6890b6..0c66b46c 100644 --- a/spring-cloud-context/src/main/java/org/springframework/cloud/context/properties/ConfigurationPropertiesRebinder.java +++ b/spring-cloud-context/src/main/java/org/springframework/cloud/context/properties/ConfigurationPropertiesRebinder.java @@ -96,10 +96,12 @@ public class ConfigurationPropertiesRebinder if (AopUtils.isAopProxy(bean)) { bean = getTargetObject(bean); } - this.applicationContext.getAutowireCapableBeanFactory().destroyBean(bean); - this.applicationContext.getAutowireCapableBeanFactory() - .initializeBean(bean, name); - return true; + if (bean != null) { + this.applicationContext.getAutowireCapableBeanFactory().destroyBean(bean); + this.applicationContext.getAutowireCapableBeanFactory() + .initializeBean(bean, name); + return true; + } } catch (RuntimeException e) { this.errors.put(name, e); diff --git a/spring-cloud-context/src/test/java/org/springframework/cloud/context/properties/ConfigurationPropertiesRebinderIntegrationTests.java b/spring-cloud-context/src/test/java/org/springframework/cloud/context/properties/ConfigurationPropertiesRebinderIntegrationTests.java index 0598c86c..b5cae4eb 100644 --- a/spring-cloud-context/src/test/java/org/springframework/cloud/context/properties/ConfigurationPropertiesRebinderIntegrationTests.java +++ b/spring-cloud-context/src/test/java/org/springframework/cloud/context/properties/ConfigurationPropertiesRebinderIntegrationTests.java @@ -17,9 +17,11 @@ package org.springframework.cloud.context.properties; import javax.annotation.PostConstruct; +import org.aopalliance.intercept.MethodInterceptor; import org.junit.Test; import org.junit.runner.RunWith; +import org.springframework.aop.framework.ProxyFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; @@ -117,6 +119,16 @@ public class ConfigurationPropertiesRebinderIntegrationTests { return new TestProperties(); } + // exposes https://github.com/spring-cloud/spring-cloud-commons/issues/337 + @Bean + @ConfigurationProperties("some.service") + public SomeService someService() { + return ProxyFactory.getProxy(SomeService.class, (MethodInterceptor) methodInvocation -> null); + } + } + + interface SomeService { + void foo(); } // Hack out a protected inner class for testing