Browse Source

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
pull/47676/head
Phillip Webb 2 months ago
parent
commit
c14b57a3eb
  1. 23
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnBeanCondition.java

23
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnBeanCondition.java

@ -270,24 +270,25 @@ class OnBeanCondition extends FilteringSpringBootCondition implements Configurat @@ -270,24 +270,25 @@ class OnBeanCondition extends FilteringSpringBootCondition implements Configurat
private boolean isCandidate(ConfigurableListableBeanFactory beanFactory, String name, BeanDefinition definition,
Set<String> ignoredBeans) {
return (!ignoredBeans.contains(name)) && (definition == null
|| isAutowireCandidate(beanFactory, name, definition) && isDefaultCandidate(definition));
if (ignoredBeans.contains(name) || definition == null) {
return false;
}
private boolean isAutowireCandidate(ConfigurableListableBeanFactory beanFactory, String name,
BeanDefinition definition) {
return definition.isAutowireCandidate() || isScopeTargetAutowireCandidate(beanFactory, name);
if (definition.isAutowireCandidate() && isDefaultCandidate(definition)) {
return true;
}
private boolean isScopeTargetAutowireCandidate(ConfigurableListableBeanFactory beanFactory, String name) {
if (ScopedProxyUtils.isScopedTarget(name)) {
try {
return ScopedProxyUtils.isScopedTarget(name)
&& beanFactory.getBeanDefinition(ScopedProxyUtils.getOriginalBeanName(name)).isAutowireCandidate();
BeanDefinition originalDefinition = beanFactory
.getBeanDefinition(ScopedProxyUtils.getOriginalBeanName(name));
if (originalDefinition.isAutowireCandidate() && isDefaultCandidate(originalDefinition)) {
return true;
}
}
catch (NoSuchBeanDefinitionException ex) {
return false;
}
}
return false;
}
private boolean isDefaultCandidate(BeanDefinition definition) {
if (definition instanceof AbstractBeanDefinition abstractBeanDefinition) {

Loading…
Cancel
Save