From c14b57a3eba14c10251afbfdbea221891b43259b Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 Oct 2025 12:03:06 -0700 Subject: [PATCH] Check scoped proxy target for isDefaultCandidate Update `OnBeanCondition` to check the scoped proxy target for `isDefaultCandidate`. This fixes an issue introduced by https://github.com/spring-projects/spring-framework/pull/35627. Fixes gh-47633 --- .../condition/OnBeanCondition.java | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnBeanCondition.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnBeanCondition.java index 4b439f13d9e..a995b9957ed 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnBeanCondition.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnBeanCondition.java @@ -270,23 +270,24 @@ class OnBeanCondition extends FilteringSpringBootCondition implements Configurat private boolean isCandidate(ConfigurableListableBeanFactory beanFactory, String name, BeanDefinition definition, Set ignoredBeans) { - return (!ignoredBeans.contains(name)) && (definition == null - || isAutowireCandidate(beanFactory, name, definition) && isDefaultCandidate(definition)); - } - - private boolean isAutowireCandidate(ConfigurableListableBeanFactory beanFactory, String name, - BeanDefinition definition) { - return definition.isAutowireCandidate() || isScopeTargetAutowireCandidate(beanFactory, name); - } - - private boolean isScopeTargetAutowireCandidate(ConfigurableListableBeanFactory beanFactory, String name) { - try { - return ScopedProxyUtils.isScopedTarget(name) - && beanFactory.getBeanDefinition(ScopedProxyUtils.getOriginalBeanName(name)).isAutowireCandidate(); - } - catch (NoSuchBeanDefinitionException ex) { + if (ignoredBeans.contains(name) || definition == null) { return false; } + if (definition.isAutowireCandidate() && isDefaultCandidate(definition)) { + return true; + } + if (ScopedProxyUtils.isScopedTarget(name)) { + try { + BeanDefinition originalDefinition = beanFactory + .getBeanDefinition(ScopedProxyUtils.getOriginalBeanName(name)); + if (originalDefinition.isAutowireCandidate() && isDefaultCandidate(originalDefinition)) { + return true; + } + } + catch (NoSuchBeanDefinitionException ex) { + } + } + return false; } private boolean isDefaultCandidate(BeanDefinition definition) {