diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnBeanCondition.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnBeanCondition.java index e2287e3455..4f774c7ed3 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnBeanCondition.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnBeanCondition.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -387,7 +387,7 @@ class OnBeanCondition extends FilteringSpringBootCondition implements Configurat private final ClassLoader classLoader; - private final Class annotationType; + private final Class annotationType; private final Set names; @@ -581,11 +581,11 @@ class OnBeanCondition extends FilteringSpringBootCondition implements Configurat } ConditionMessage.Builder message() { - return ConditionMessage.forCondition(ConditionalOnBean.class, this); + return ConditionMessage.forCondition(this.annotationType, this); } ConditionMessage.Builder message(ConditionMessage message) { - return message.andCondition(ConditionalOnBean.class, this); + return message.andCondition(this.annotationType, this); } @Override diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/condition/ConditionalOnBeanTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/condition/ConditionalOnBeanTests.java index b588ccfe8c..6f6a0d428b 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/condition/ConditionalOnBeanTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/condition/ConditionalOnBeanTests.java @@ -21,6 +21,7 @@ import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import java.util.Collection; import java.util.Date; import java.util.function.Consumer; @@ -29,6 +30,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.RootBeanDefinition; +import org.springframework.boot.autoconfigure.condition.ConditionEvaluationReport.ConditionAndOutcomes; import org.springframework.boot.test.context.assertj.AssertableApplicationContext; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.ConfigurableApplicationContext; @@ -134,6 +136,17 @@ class ConditionalOnBeanTests { assertThat(context.getBean("bar")).isEqualTo("bar"); } + @Test + void onBeanConditionOutputShouldNotContainConditionalOnMissingBeanClassInMessage() { + this.contextRunner.withUserConfiguration(OnBeanNameConfiguration.class).run((context) -> { + Collection conditionAndOutcomes = ConditionEvaluationReport + .get(context.getSourceApplicationContext().getBeanFactory()).getConditionAndOutcomesBySource() + .values(); + String message = conditionAndOutcomes.iterator().next().iterator().next().getOutcome().getMessage(); + assertThat(message).doesNotContain("@ConditionalOnMissingBean"); + }); + } + @Test void conditionEvaluationConsidersChangeInTypeWhenBeanIsOverridden() { this.contextRunner.withUserConfiguration(OriginalDefinition.class, OverridingDefinition.class, diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/condition/ConditionalOnMissingBeanTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/condition/ConditionalOnMissingBeanTests.java index 9a24b37c29..86a85cc398 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/condition/ConditionalOnMissingBeanTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/condition/ConditionalOnMissingBeanTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import java.util.Collection; import java.util.Date; import java.util.function.Consumer; @@ -136,6 +137,17 @@ public class ConditionalOnMissingBeanTests { }); } + @Test + void testOnMissingBeanConditionOutputShouldNotContainConditionalOnBeanClassInMessage() { + this.contextRunner.withUserConfiguration(OnBeanNameConfiguration.class).run((context) -> { + Collection conditionAndOutcomes = ConditionEvaluationReport + .get(context.getSourceApplicationContext().getBeanFactory()).getConditionAndOutcomesBySource() + .values(); + String message = conditionAndOutcomes.iterator().next().iterator().next().getOutcome().getMessage(); + assertThat(message).doesNotContain("@ConditionalOnBean"); + }); + } + @Test void testOnMissingBeanConditionWithFactoryBean() { this.contextRunner