From a21397dbe233315939651e129babd6c97a030c6a Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Thu, 30 Jan 2014 10:20:34 +0000 Subject: [PATCH] Fix AutoConfigurationReport parent location BeanFactory.getBean() already looks in the parent context so we have to be careful and not use the parent when locating the report singleton Fixes gh-290 --- .../autoconfigure/AutoConfigurationReport.java | 5 ++--- .../AutoConfigurationReportTests.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/AutoConfigurationReport.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/AutoConfigurationReport.java index 0d5fcd2f38..3907e6fe24 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/AutoConfigurationReport.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/AutoConfigurationReport.java @@ -25,7 +25,6 @@ import java.util.SortedMap; import java.util.TreeMap; import org.springframework.beans.factory.BeanFactory; -import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.boot.autoconfigure.condition.ConditionOutcome; import org.springframework.context.annotation.Condition; @@ -94,10 +93,10 @@ public class AutoConfigurationReport { public static AutoConfigurationReport get(ConfigurableListableBeanFactory beanFactory) { synchronized (beanFactory) { AutoConfigurationReport report; - try { + if (beanFactory.containsSingleton(BEAN_NAME)) { report = beanFactory.getBean(BEAN_NAME, AutoConfigurationReport.class); } - catch (NoSuchBeanDefinitionException ex) { + else { report = new AutoConfigurationReport(); beanFactory.registerSingleton(BEAN_NAME, report); } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/AutoConfigurationReportTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/AutoConfigurationReportTests.java index 557d73c27e..ce09ea47b6 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/AutoConfigurationReportTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/AutoConfigurationReportTests.java @@ -106,6 +106,21 @@ public class AutoConfigurationReportTests { .getParentBeanFactory()))); } + @Test + public void parentBottomUp() throws Exception { + this.beanFactory = new DefaultListableBeanFactory(); // NB: overrides setup + this.beanFactory.setParentBeanFactory(new DefaultListableBeanFactory()); + AutoConfigurationReport.get((ConfigurableListableBeanFactory) this.beanFactory + .getParentBeanFactory()); + this.report = AutoConfigurationReport.get(this.beanFactory); // NB: overrides + // setup + + assertThat(this.report, not(nullValue())); + assertThat(this.report, not(sameInstance(this.report.getParent()))); + assertThat(this.report.getParent(), not(nullValue())); + assertThat(this.report.getParent().getParent(), nullValue()); + } + @Test public void recordConditionEvaluations() throws Exception { this.outcome1 = new ConditionOutcome(false, "m1");