-
Notifications
You must be signed in to change notification settings - Fork 41.7k
Description
Summary
After upgrading from Spring Boot 3.4.6 to 3.5.0, a configuration class that previously worked now fails with a BeanDefinitionOverrideException due to a duplicate bean definition. The issue appears to be related to how @ConditionalOnMissingBean is evaluated when multiple @Bean methods with the same name exist in the same configuration class.
Sample Configuration
@Configuration(proxyBeanMethods = false)
@EnableMongoAuditing(auditorAwareRef = "mongoAuditorAware")
public class AuditConfiguration {
@Bean(name = "mongoAuditorAware")
@ConditionalOnClass(name = "org.springframework.security.core.context.SecurityContextHolder")
public AuditorAware<?> mongoAuditorAware(...) {
...
}
@Bean(name = "mongoAuditorAware")
@ConditionalOnMissingBean
public AuditorAware<String> mongoWithoutSpringSecurityAuditorAware(...) {
...
}
}
Behavior
✅ In 3.4.6: Only one bean is registered depending on the presence of the class and the condition.
❌ In 3.5.0: Both methods are evaluated, and a mongoAuditorAware bean is defined twice, causing a failure.
Expected Behavior
@ConditionalOnMissingBean should prevent the second bean from being registered if one with the same name already exists or is about to be registered.
Workaround
Changing the annotation to:
@ConditionalOnMissingBean(name = "mongoAuditorAware")
resolves the issue, but this was not required in previous versions.
Analysis
This change in behavior is not documented in the 3.5.0 release notes.
There is no related issue or pull request indicating this was an intentional change.
It may be a regression or an unintended side effect of internal changes to condition evaluation.
Request
Please clarify whether this is an intentional change in Spring Boot 3.5.0. If so, it would be helpful to document it as a breaking change. Otherwise, it may be worth investigating as a regression.