29
29
30
30
/**
31
31
* Tests regarding overloading and overriding of bean methods.
32
+ *
32
33
* <p>Related to SPR-6618.
33
34
*
34
35
* @author Chris Beams
@@ -41,6 +42,7 @@ public class BeanMethodPolymorphismTests {
41
42
@ Test
42
43
void beanMethodDetectedOnSuperClass () {
43
44
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (Config .class );
45
+
44
46
assertThat (ctx .getBean ("testBean" , BaseTestBean .class )).isNotNull ();
45
47
}
46
48
@@ -50,6 +52,7 @@ void beanMethodOverriding() {
50
52
ctx .register (OverridingConfig .class );
51
53
ctx .setAllowBeanDefinitionOverriding (false );
52
54
ctx .refresh ();
55
+
53
56
assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("testBean" )).isFalse ();
54
57
assertThat (ctx .getBean ("testBean" , BaseTestBean .class ).toString ()).isEqualTo ("overridden" );
55
58
assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("testBean" )).isTrue ();
@@ -61,17 +64,45 @@ void beanMethodOverridingOnASM() {
61
64
ctx .registerBeanDefinition ("config" , new RootBeanDefinition (OverridingConfig .class .getName ()));
62
65
ctx .setAllowBeanDefinitionOverriding (false );
63
66
ctx .refresh ();
67
+
64
68
assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("testBean" )).isFalse ();
65
69
assertThat (ctx .getBean ("testBean" , BaseTestBean .class ).toString ()).isEqualTo ("overridden" );
66
70
assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("testBean" )).isTrue ();
67
71
}
68
72
73
+ @ Test
74
+ void beanMethodOverridingWithDifferentBeanName () {
75
+ AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext ();
76
+ ctx .register (OverridingConfigWithDifferentBeanName .class );
77
+ ctx .setAllowBeanDefinitionOverriding (false );
78
+ ctx .refresh ();
79
+
80
+ assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("myTestBean" )).isFalse ();
81
+ assertThat (ctx .getBean ("myTestBean" , BaseTestBean .class ).toString ()).isEqualTo ("overridden" );
82
+ assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("myTestBean" )).isTrue ();
83
+ assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("testBean" )).isFalse ();
84
+ }
85
+
86
+ @ Test
87
+ void beanMethodOverridingWithDifferentBeanNameOnASM () {
88
+ AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext ();
89
+ ctx .registerBeanDefinition ("config" , new RootBeanDefinition (OverridingConfigWithDifferentBeanName .class .getName ()));
90
+ ctx .setAllowBeanDefinitionOverriding (false );
91
+ ctx .refresh ();
92
+
93
+ assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("myTestBean" )).isFalse ();
94
+ assertThat (ctx .getBean ("myTestBean" , BaseTestBean .class ).toString ()).isEqualTo ("overridden" );
95
+ assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("myTestBean" )).isTrue ();
96
+ assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("testBean" )).isFalse ();
97
+ }
98
+
69
99
@ Test
70
100
void beanMethodOverridingWithNarrowedReturnType () {
71
101
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext ();
72
102
ctx .register (NarrowedOverridingConfig .class );
73
103
ctx .setAllowBeanDefinitionOverriding (false );
74
104
ctx .refresh ();
105
+
75
106
assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("testBean" )).isFalse ();
76
107
assertThat (ctx .getBean ("testBean" , BaseTestBean .class ).toString ()).isEqualTo ("overridden" );
77
108
assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("testBean" )).isTrue ();
@@ -83,6 +114,7 @@ void beanMethodOverridingWithNarrowedReturnTypeOnASM() {
83
114
ctx .registerBeanDefinition ("config" , new RootBeanDefinition (NarrowedOverridingConfig .class .getName ()));
84
115
ctx .setAllowBeanDefinitionOverriding (false );
85
116
ctx .refresh ();
117
+
86
118
assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("testBean" )).isFalse ();
87
119
assertThat (ctx .getBean ("testBean" , BaseTestBean .class ).toString ()).isEqualTo ("overridden" );
88
120
assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("testBean" )).isTrue ();
@@ -94,6 +126,7 @@ void beanMethodOverloadingWithoutInheritance() {
94
126
ctx .register (ConfigWithOverloading .class );
95
127
ctx .setAllowBeanDefinitionOverriding (false );
96
128
ctx .refresh ();
129
+
97
130
assertThat (ctx .getBean (String .class )).isEqualTo ("regular" );
98
131
}
99
132
@@ -104,6 +137,7 @@ void beanMethodOverloadingWithoutInheritanceAndExtraDependency() {
104
137
ctx .getDefaultListableBeanFactory ().registerSingleton ("anInt" , 5 );
105
138
ctx .setAllowBeanDefinitionOverriding (false );
106
139
ctx .refresh ();
140
+
107
141
assertThat (ctx .getBean (String .class )).isEqualTo ("overloaded5" );
108
142
}
109
143
@@ -113,6 +147,7 @@ void beanMethodOverloadingWithAdditionalMetadata() {
113
147
ctx .register (ConfigWithOverloadingAndAdditionalMetadata .class );
114
148
ctx .setAllowBeanDefinitionOverriding (false );
115
149
ctx .refresh ();
150
+
116
151
assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("aString" )).isFalse ();
117
152
assertThat (ctx .getBean (String .class )).isEqualTo ("regular" );
118
153
assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("aString" )).isTrue ();
@@ -125,6 +160,7 @@ void beanMethodOverloadingWithAdditionalMetadataButOtherMethodExecuted() {
125
160
ctx .getDefaultListableBeanFactory ().registerSingleton ("anInt" , 5 );
126
161
ctx .setAllowBeanDefinitionOverriding (false );
127
162
ctx .refresh ();
163
+
128
164
assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("aString" )).isFalse ();
129
165
assertThat (ctx .getBean (String .class )).isEqualTo ("overloaded5" );
130
166
assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("aString" )).isTrue ();
@@ -136,18 +172,19 @@ void beanMethodOverloadingWithInheritance() {
136
172
ctx .register (SubConfig .class );
137
173
ctx .setAllowBeanDefinitionOverriding (false );
138
174
ctx .refresh ();
175
+
139
176
assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("aString" )).isFalse ();
140
177
assertThat (ctx .getBean (String .class )).isEqualTo ("overloaded5" );
141
178
assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("aString" )).isTrue ();
142
179
}
143
180
144
- // SPR-11025
145
- @ Test
181
+ @ Test // SPR-11025
146
182
void beanMethodOverloadingWithInheritanceAndList () {
147
183
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext ();
148
184
ctx .register (SubConfigWithList .class );
149
185
ctx .setAllowBeanDefinitionOverriding (false );
150
186
ctx .refresh ();
187
+
151
188
assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("aString" )).isFalse ();
152
189
assertThat (ctx .getBean (String .class )).isEqualTo ("overloaded5" );
153
190
assertThat (ctx .getDefaultListableBeanFactory ().containsSingleton ("aString" )).isTrue ();
@@ -161,6 +198,7 @@ void beanMethodOverloadingWithInheritanceAndList() {
161
198
@ Test
162
199
void beanMethodShadowing () {
163
200
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (ShadowConfig .class );
201
+
164
202
assertThat (ctx .getBean (String .class )).isEqualTo ("shadow" );
165
203
}
166
204
@@ -214,6 +252,22 @@ public String toString() {
214
252
}
215
253
216
254
255
+ @ Configuration
256
+ static class OverridingConfigWithDifferentBeanName extends BaseConfig {
257
+
258
+ @ Bean ("myTestBean" ) @ Lazy
259
+ @ Override
260
+ public BaseTestBean testBean () {
261
+ return new BaseTestBean () {
262
+ @ Override
263
+ public String toString () {
264
+ return "overridden" ;
265
+ }
266
+ };
267
+ }
268
+ }
269
+
270
+
217
271
@ Configuration
218
272
static class NarrowedOverridingConfig extends BaseConfig {
219
273
0 commit comments