Closed
Description
Andy Wilkinson opened SPR-12694 and commented
In Spring Boot, I'd like to be able to override a method in a Spring Data REST configuration class to make it conditional, however this doesn't work. The condition on the overriding method is evaluated and correctly considered as not matching but the overridden method is then also considered. It has no conditions so a bean definition is created.
This is illustrated by this test:
import java.util.Map;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.type.AnnotatedTypeMetadata;
import static org.junit.Assert.assertEquals;
public class ConditionalOverriddenBeanMethodTests {
@Test
public void conditionsOnOverriddenMethodsAreHonoured() {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(
Bar.class);
Map<String, Baz> beansOfType = context.getBeansOfType(Baz.class);
assertEquals(0, beansOfType.size());
}
@Configuration
private static class Foo {
@Bean
public Baz baz() {
return new Baz();
}
}
private static class Bar extends Foo {
@Override
@Bean
@Conditional(NeverMatchesCondition.class)
public Baz baz() {
return new Baz();
}
}
private static class Baz {
}
private static class NeverMatchesCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return false;
}
}
}
My expectation is that the condition will prevent the Baz
bean from being created.
Affects: 4.1.4
Reference URL: spring-projects/spring-boot#2267
Issue Links:
- Regression in 4.1.5: Alternative @Bean declarations with same primary bean name do not work anymore [SPR-12744] #17341 Regression in 4.1.5: Alternative
@Bean
declarations with same primary bean name do not work anymore - Doc: Consistent @Profile declarations on overloaded @Bean methods [SPR-15266] #19831 Doc: Consistent
@Profile
declarations on overloaded@Bean
methods
0 votes, 5 watchers