diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassBeanDefinitionReader.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassBeanDefinitionReader.java index 4fef9a3817c..b0ee9ca76a8 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassBeanDefinitionReader.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassBeanDefinitionReader.java @@ -117,13 +117,7 @@ class ConfigurationClassBeanDefinitionReader { public void loadBeanDefinitions(Set configurationModel) { TrackedConditionEvaluator trackedConditionEvaluator = new TrackedConditionEvaluator(); for (ConfigurationClass configClass : configurationModel) { - try { - loadBeanDefinitionsForConfigurationClass(configClass, trackedConditionEvaluator); - } - catch (Exception ex) { - throw new IllegalStateException("Failed to load bean definitions for configuration class '" + - configClass.getMetadata().getClassName() + "'", ex); - } + loadBeanDefinitionsForConfigurationClass(configClass, trackedConditionEvaluator); } } @@ -163,9 +157,17 @@ class ConfigurationClassBeanDefinitionReader { ScopeMetadata scopeMetadata = scopeMetadataResolver.resolveScopeMetadata(configBeanDef); configBeanDef.setScope(scopeMetadata.getScopeName()); - String configBeanName = this.importBeanNameGenerator.generateBeanName(configBeanDef, this.registry); - AnnotationConfigUtils.processCommonDefinitionAnnotations(configBeanDef, metadata); + String configBeanName; + try { + configBeanName = this.importBeanNameGenerator.generateBeanName(configBeanDef, this.registry); + } + catch (IllegalArgumentException ex) { + throw new IllegalStateException("Failed to generate bean name for imported class '" + + configClass.getMetadata().getClassName() + "'", ex); + } + + AnnotationConfigUtils.processCommonDefinitionAnnotations(configBeanDef, metadata); BeanDefinitionHolder definitionHolder = new BeanDefinitionHolder(configBeanDef, configBeanName); definitionHolder = AnnotationConfigUtils.applyScopedProxyMode(scopeMetadata, definitionHolder, this.registry); this.registry.registerBeanDefinition(definitionHolder.getBeanName(), definitionHolder.getBeanDefinition()); diff --git a/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java b/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java index e1153782aea..daf234ad8d4 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java @@ -410,35 +410,28 @@ class ConfigurationClassPostProcessorTests { beanFactory.setAllowBeanDefinitionOverriding(false); ConfigurationClassPostProcessor pp = new ConfigurationClassPostProcessor(); - assertThatIllegalStateException() + assertThatExceptionOfType(BeanDefinitionStoreException.class) .isThrownBy(() -> pp.postProcessBeanFactory(beanFactory)) - .withMessage("Failed to load bean definitions for configuration class '%s'", SingletonBeanConfig.class.getName()) - .havingCause() - .isInstanceOf(BeanDefinitionStoreException.class) - .withMessageContainingAll( - "bar", - "SingletonBeanConfig", - TestBean.class.getName() - ); + .withMessageContainingAll( + "bar", + "SingletonBeanConfig", + TestBean.class.getName() + ); } @Test // gh-25430 void detectAliasOverride() { - Class configClass = SecondConfiguration.class; AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); DefaultListableBeanFactory beanFactory = context.getDefaultListableBeanFactory(); beanFactory.setAllowBeanDefinitionOverriding(false); - context.register(FirstConfiguration.class, configClass); + context.register(FirstConfiguration.class, SecondConfiguration.class); assertThatIllegalStateException().isThrownBy(context::refresh) - .withMessage("Failed to load bean definitions for configuration class '%s'", configClass.getName()) - .havingCause() - .isExactlyInstanceOf(IllegalStateException.class) - .withMessageContainingAll( - "alias 'taskExecutor'", - "name 'applicationTaskExecutor'", - "bean definition 'taskExecutor'" - ); + .withMessageContainingAll( + "alias 'taskExecutor'", + "name 'applicationTaskExecutor'", + "bean definition 'taskExecutor'" + ); context.close(); } @@ -1171,11 +1164,8 @@ class ConfigurationClassPostProcessorTests { @Test void nameClashBetweenConfigurationClassAndBean() { - assertThatIllegalStateException() - .isThrownBy(() -> new AnnotationConfigApplicationContext(MyTestBean.class)) - .withMessage("Failed to load bean definitions for configuration class '%s'", MyTestBean.class.getName()) - .havingCause() - .isInstanceOf(BeanDefinitionStoreException.class); + assertThatExceptionOfType(BeanDefinitionStoreException.class) + .isThrownBy(() -> new AnnotationConfigApplicationContext(MyTestBean.class)); } @Test diff --git a/spring-context/src/test/java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java b/spring-context/src/test/java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java index 025f4f5d654..0c50d20f0fd 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java @@ -60,7 +60,6 @@ import org.springframework.context.support.GenericApplicationContext; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.assertj.core.api.Assertions.assertThatIllegalStateException; /** * Miscellaneous system tests covering {@link Bean} naming, aliases, scoping and @@ -223,12 +222,8 @@ class ConfigurationClassProcessingTests { @Test // gh-33330 void configurationWithMethodNameMismatch() { - Class configClass = ConfigWithMethodNameMismatch.class; - assertThatIllegalStateException() - .isThrownBy(() -> initBeanFactory(false, configClass)) - .withMessage("Failed to load bean definitions for configuration class '%s'", configClass.getName()) - .havingCause() - .isInstanceOf(BeanDefinitionOverrideException.class); + assertThatExceptionOfType(BeanDefinitionOverrideException.class) + .isThrownBy(() -> initBeanFactory(false, ConfigWithMethodNameMismatch.class)); } @Test // gh-33920