@@ -110,7 +110,7 @@ void aliasesAreRespectedWhenConfiguredViaValueAttribute() {
110110
111111 private void aliasesAreRespected (Class <?> testClass , Supplier <TestBean > testBeanSupplier , String beanName ) {
112112 TestBean testBean = testBeanSupplier .get ();
113- BeanFactory factory = initBeanFactory (testClass );
113+ BeanFactory factory = initBeanFactory (false , testClass );
114114
115115 assertThat (factory .getBean (beanName )).isSameAs (testBean );
116116 Arrays .stream (factory .getAliases (beanName )).map (factory ::getBean ).forEach (alias -> assertThat (alias ).isSameAs (testBean ));
@@ -141,30 +141,30 @@ void configWithSetWithProviderImplementation() {
141141 @ Test
142142 void finalBeanMethod () {
143143 assertThatExceptionOfType (BeanDefinitionParsingException .class ).isThrownBy (() ->
144- initBeanFactory (ConfigWithFinalBean .class ));
144+ initBeanFactory (false , ConfigWithFinalBean .class ));
145145 }
146146
147147 @ Test
148148 void finalBeanMethodWithoutProxy () {
149- initBeanFactory (ConfigWithFinalBeanWithoutProxy .class );
149+ initBeanFactory (false , ConfigWithFinalBeanWithoutProxy .class );
150150 }
151151
152152 @ Test // gh-31007
153153 void voidBeanMethod () {
154154 assertThatExceptionOfType (BeanDefinitionParsingException .class ).isThrownBy (() ->
155- initBeanFactory (ConfigWithVoidBean .class ));
155+ initBeanFactory (false , ConfigWithVoidBean .class ));
156156 }
157157
158158 @ Test
159159 void simplestPossibleConfig () {
160- BeanFactory factory = initBeanFactory (SimplestPossibleConfig .class );
160+ BeanFactory factory = initBeanFactory (false , SimplestPossibleConfig .class );
161161 String stringBean = factory .getBean ("stringBean" , String .class );
162162 assertThat (stringBean ).isEqualTo ("foo" );
163163 }
164164
165165 @ Test
166166 void configWithObjectReturnType () {
167- BeanFactory factory = initBeanFactory (ConfigWithNonSpecificReturnTypes .class );
167+ BeanFactory factory = initBeanFactory (false , ConfigWithNonSpecificReturnTypes .class );
168168 assertThat (factory .getType ("stringBean" )).isEqualTo (Object .class );
169169 assertThat (factory .isTypeMatch ("stringBean" , String .class )).isFalse ();
170170 String stringBean = factory .getBean ("stringBean" , String .class );
@@ -173,7 +173,7 @@ void configWithObjectReturnType() {
173173
174174 @ Test
175175 void configWithFactoryBeanReturnType () {
176- ListableBeanFactory factory = initBeanFactory (ConfigWithNonSpecificReturnTypes .class );
176+ ListableBeanFactory factory = initBeanFactory (false , ConfigWithNonSpecificReturnTypes .class );
177177 assertThat (factory .getType ("factoryBean" )).isEqualTo (List .class );
178178 assertThat (factory .isTypeMatch ("factoryBean" , List .class )).isTrue ();
179179 assertThat (factory .getType ("&factoryBean" )).isEqualTo (FactoryBean .class );
@@ -201,7 +201,7 @@ void configWithFactoryBeanReturnType() {
201201
202202 @ Test
203203 void configurationWithPrototypeScopedBeans () {
204- BeanFactory factory = initBeanFactory (ConfigWithPrototypeBean .class );
204+ BeanFactory factory = initBeanFactory (false , ConfigWithPrototypeBean .class );
205205
206206 TestBean foo = factory .getBean ("foo" , TestBean .class );
207207 ITestBean bar = factory .getBean ("bar" , ITestBean .class );
@@ -213,7 +213,7 @@ void configurationWithPrototypeScopedBeans() {
213213
214214 @ Test
215215 void configurationWithNullReference () {
216- BeanFactory factory = initBeanFactory (ConfigWithNullReference .class );
216+ BeanFactory factory = initBeanFactory (false , ConfigWithNullReference .class );
217217
218218 TestBean foo = factory .getBean ("foo" , TestBean .class );
219219 assertThat (factory .getBean ("bar" )).isEqualTo (null );
@@ -223,7 +223,15 @@ void configurationWithNullReference() {
223223 @ Test // gh-33330
224224 void configurationWithMethodNameMismatch () {
225225 assertThatExceptionOfType (BeanDefinitionOverrideException .class )
226- .isThrownBy (() -> initBeanFactory (ConfigWithMethodNameMismatch .class ));
226+ .isThrownBy (() -> initBeanFactory (false , ConfigWithMethodNameMismatch .class ));
227+ }
228+
229+ @ Test // gh-33920
230+ void configurationWithMethodNameMismatchAndOverridingAllowed () {
231+ BeanFactory factory = initBeanFactory (true , ConfigWithMethodNameMismatch .class );
232+
233+ SpousyTestBean foo = factory .getBean ("foo" , SpousyTestBean .class );
234+ assertThat (foo .getName ()).isEqualTo ("foo1" );
227235 }
228236
229237 @ Test
@@ -353,13 +361,13 @@ void autowiringWithDynamicPrototypeBeanClass() {
353361 * When complete, the factory is ready to service requests for any {@link Bean} methods
354362 * declared by {@code configClasses}.
355363 */
356- private DefaultListableBeanFactory initBeanFactory (Class <?>... configClasses ) {
364+ private DefaultListableBeanFactory initBeanFactory (boolean allowOverriding , Class <?>... configClasses ) {
357365 DefaultListableBeanFactory factory = new DefaultListableBeanFactory ();
358366 for (Class <?> configClass : configClasses ) {
359367 String configBeanName = configClass .getName ();
360368 factory .registerBeanDefinition (configBeanName , new RootBeanDefinition (configClass ));
361369 }
362- factory .setAllowBeanDefinitionOverriding (false );
370+ factory .setAllowBeanDefinitionOverriding (allowOverriding );
363371 ConfigurationClassPostProcessor ccpp = new ConfigurationClassPostProcessor ();
364372 ccpp .postProcessBeanDefinitionRegistry (factory );
365373 ccpp .postProcessBeanFactory (factory );
@@ -537,12 +545,12 @@ public TestBean bar() {
537545 @ Configuration
538546 static class ConfigWithMethodNameMismatch {
539547
540- @ Bean (name = "foo" ) public TestBean foo () {
541- return new SpousyTestBean ("foo " );
548+ @ Bean (name = "foo" ) public TestBean foo1 () {
549+ return new SpousyTestBean ("foo1 " );
542550 }
543551
544- @ Bean (name = "foo" ) public TestBean fooX () {
545- return new SpousyTestBean ("fooX " );
552+ @ Bean (name = "foo" ) public TestBean foo2 () {
553+ return new SpousyTestBean ("foo2 " );
546554 }
547555 }
548556
0 commit comments