Prevent @Bean method overloading by default (with enforceUniqueMethods flag)

Closes gh-22609
This commit is contained in:
Juergen Hoeller
2022-02-17 22:37:34 +01:00
parent 41ee23345d
commit 4a470e0a37
5 changed files with 71 additions and 29 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2021 the original author or authors.
* Copyright 2002-2022 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.
@@ -41,7 +41,7 @@ public class BeanMethodPolymorphismTests {
@Test
public void beanMethodDetectedOnSuperClass() {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);
assertThat(ctx.getBean("testBean", TestBean.class)).isNotNull();
assertThat(ctx.getBean("testBean", BaseTestBean.class)).isNotNull();
}
@Test
@@ -51,7 +51,7 @@ public class BeanMethodPolymorphismTests {
ctx.setAllowBeanDefinitionOverriding(false);
ctx.refresh();
assertThat(ctx.getDefaultListableBeanFactory().containsSingleton("testBean")).isFalse();
assertThat(ctx.getBean("testBean", TestBean.class).toString()).isEqualTo("overridden");
assertThat(ctx.getBean("testBean", BaseTestBean.class).toString()).isEqualTo("overridden");
assertThat(ctx.getDefaultListableBeanFactory().containsSingleton("testBean")).isTrue();
}
@@ -62,7 +62,7 @@ public class BeanMethodPolymorphismTests {
ctx.setAllowBeanDefinitionOverriding(false);
ctx.refresh();
assertThat(ctx.getDefaultListableBeanFactory().containsSingleton("testBean")).isFalse();
assertThat(ctx.getBean("testBean", TestBean.class).toString()).isEqualTo("overridden");
assertThat(ctx.getBean("testBean", BaseTestBean.class).toString()).isEqualTo("overridden");
assertThat(ctx.getDefaultListableBeanFactory().containsSingleton("testBean")).isTrue();
}
@@ -73,7 +73,7 @@ public class BeanMethodPolymorphismTests {
ctx.setAllowBeanDefinitionOverriding(false);
ctx.refresh();
assertThat(ctx.getDefaultListableBeanFactory().containsSingleton("testBean")).isFalse();
assertThat(ctx.getBean("testBean", TestBean.class).toString()).isEqualTo("overridden");
assertThat(ctx.getBean("testBean", BaseTestBean.class).toString()).isEqualTo("overridden");
assertThat(ctx.getDefaultListableBeanFactory().containsSingleton("testBean")).isTrue();
}
@@ -84,7 +84,7 @@ public class BeanMethodPolymorphismTests {
ctx.setAllowBeanDefinitionOverriding(false);
ctx.refresh();
assertThat(ctx.getDefaultListableBeanFactory().containsSingleton("testBean")).isFalse();
assertThat(ctx.getBean("testBean", TestBean.class).toString()).isEqualTo("overridden");
assertThat(ctx.getBean("testBean", BaseTestBean.class).toString()).isEqualTo("overridden");
assertThat(ctx.getDefaultListableBeanFactory().containsSingleton("testBean")).isTrue();
}
@@ -171,7 +171,15 @@ public class BeanMethodPolymorphismTests {
ctx.register(AnnotationAwareAspectJAutoProxyCreator.class);
ctx.register(TestAdvisor.class);
ctx.refresh();
ctx.getBean("testBean", TestBean.class);
ctx.getBean("testBean", BaseTestBean.class);
}
static class BaseTestBean {
}
static class ExtendedTestBean extends BaseTestBean {
}
@@ -179,8 +187,8 @@ public class BeanMethodPolymorphismTests {
static class BaseConfig {
@Bean
public TestBean testBean() {
return new TestBean();
public BaseTestBean testBean() {
return new BaseTestBean();
}
}
@@ -195,8 +203,8 @@ public class BeanMethodPolymorphismTests {
@Bean @Lazy
@Override
public TestBean testBean() {
return new TestBean() {
public BaseTestBean testBean() {
return new BaseTestBean() {
@Override
public String toString() {
return "overridden";
@@ -206,10 +214,6 @@ public class BeanMethodPolymorphismTests {
}
static class ExtendedTestBean extends TestBean {
}
@Configuration
static class NarrowedOverridingConfig extends BaseConfig {
@@ -226,7 +230,7 @@ public class BeanMethodPolymorphismTests {
}
@Configuration
@Configuration(enforceUniqueMethods = false)
static class ConfigWithOverloading {
@Bean
@@ -241,7 +245,7 @@ public class BeanMethodPolymorphismTests {
}
@Configuration
@Configuration(enforceUniqueMethods = false)
static class ConfigWithOverloadingAndAdditionalMetadata {
@Bean @Lazy

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2020 the original author or authors.
* Copyright 2002-2022 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.
@@ -626,7 +626,7 @@ public class ConfigurationClassProcessingTests {
}
@Configuration
@Configuration(enforceUniqueMethods = false)
public static class OverloadedBeanMismatch {
@Bean(name = "other")