Skip to content

Commit d733023

Browse files
committed
Consistently apply fallback attribute to proxy definition as well
See gh-35627
1 parent df67c1c commit d733023

File tree

2 files changed

+33
-30
lines changed

2 files changed

+33
-30
lines changed

spring-aop/src/main/java/org/springframework/aop/scope/ScopedProxyUtils.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,16 @@ public static BeanDefinitionHolder createScopedProxy(BeanDefinitionHolder defini
8181
// Copy autowire settings from original bean definition.
8282
proxyDefinition.setAutowireCandidate(targetDefinition.isAutowireCandidate());
8383
proxyDefinition.setPrimary(targetDefinition.isPrimary());
84+
proxyDefinition.setFallback(targetDefinition.isFallback());
8485
if (targetDefinition instanceof AbstractBeanDefinition abd) {
85-
proxyDefinition.copyQualifiersFrom(abd);
8686
proxyDefinition.setDefaultCandidate(abd.isDefaultCandidate());
87+
proxyDefinition.copyQualifiersFrom(abd);
8788
}
8889

8990
// The target bean should be ignored in favor of the scoped proxy.
9091
targetDefinition.setAutowireCandidate(false);
9192
targetDefinition.setPrimary(false);
93+
targetDefinition.setFallback(false);
9294
if (targetDefinition instanceof AbstractBeanDefinition abd) {
9395
abd.setDefaultCandidate(false);
9496
}

spring-aop/src/test/java/org/springframework/aop/scope/ScopedProxyUtilsTests.java

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@
3030
import static org.assertj.core.api.Assertions.assertThat;
3131
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
3232

33-
3433
/**
3534
* Tests for {@link ScopedProxyUtils}.
3635
*
3736
* @author Sam Brannen
37+
* @author Juergen Hoeller
3838
* @since 5.1.10
3939
*/
4040
class ScopedProxyUtilsTests {
@@ -63,78 +63,79 @@ void getOriginalBeanNameAndIsScopedTarget() {
6363
@Test
6464
void getOriginalBeanNameForNullTargetBean() {
6565
assertThatIllegalArgumentException()
66-
.isThrownBy(() -> ScopedProxyUtils.getOriginalBeanName(null))
67-
.withMessage("bean name 'null' does not refer to the target of a scoped proxy");
66+
.isThrownBy(() -> ScopedProxyUtils.getOriginalBeanName(null))
67+
.withMessage("bean name 'null' does not refer to the target of a scoped proxy");
6868
}
6969

7070
@Test
7171
void getOriginalBeanNameForNonScopedTarget() {
7272
assertThatIllegalArgumentException()
73-
.isThrownBy(() -> ScopedProxyUtils.getOriginalBeanName("myBean"))
74-
.withMessage("bean name 'myBean' does not refer to the target of a scoped proxy");
73+
.isThrownBy(() -> ScopedProxyUtils.getOriginalBeanName("myBean"))
74+
.withMessage("bean name 'myBean' does not refer to the target of a scoped proxy");
7575
}
7676

7777
@Test
78-
void createScopedProxyTargetOvertakesAutowireSettingsToProxyBeanDefinition() {
79-
final AbstractBeanDefinition targetDefinition = new GenericBeanDefinition();
78+
void createScopedProxyTargetAppliesAutowireSettingsToProxyBeanDefinition() {
79+
AbstractBeanDefinition targetDefinition = new GenericBeanDefinition();
8080
// Opposite of defaults
8181
targetDefinition.setAutowireCandidate(false);
8282
targetDefinition.setDefaultCandidate(false);
8383
targetDefinition.setPrimary(true);
84+
targetDefinition.setFallback(true);
8485

85-
final BeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
86-
final BeanDefinitionHolder proxyHolder = ScopedProxyUtils.createScopedProxy(new BeanDefinitionHolder(targetDefinition, "myBean"), registry, false);
87-
assertThat(proxyHolder).isNotNull();
88-
final BeanDefinition proxyBeanDefinition = proxyHolder.getBeanDefinition();
89-
assertThat(proxyBeanDefinition).isNotNull();
90-
assertThat(proxyBeanDefinition).isInstanceOf(RootBeanDefinition.class);
86+
BeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
87+
BeanDefinitionHolder proxyHolder = ScopedProxyUtils.createScopedProxy(
88+
new BeanDefinitionHolder(targetDefinition, "myBean"), registry, false);
89+
AbstractBeanDefinition proxyBeanDefinition = (AbstractBeanDefinition) proxyHolder.getBeanDefinition();
9190

9291
assertThat(proxyBeanDefinition.isAutowireCandidate()).isFalse();
92+
assertThat(proxyBeanDefinition.isDefaultCandidate()).isFalse();
9393
assertThat(proxyBeanDefinition.isPrimary()).isTrue();
94-
assertThat(((RootBeanDefinition)proxyBeanDefinition).isDefaultCandidate()).isFalse();
94+
assertThat(proxyBeanDefinition.isFallback()).isTrue();
9595
}
9696

9797
@Test
98-
void createScopedProxyTargetOvertakesBeanAttributesToProxyBeanDefinition() {
99-
final GenericBeanDefinition targetDefinition = new GenericBeanDefinition();
98+
void createScopedProxyTargetAppliesBeanAttributesToProxyBeanDefinition() {
99+
GenericBeanDefinition targetDefinition = new GenericBeanDefinition();
100100
// Opposite of defaults
101101
targetDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
102102
targetDefinition.setSource("theSource");
103103
targetDefinition.addQualifier(new AutowireCandidateQualifier("myQualifier"));
104104

105-
final BeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
106-
final BeanDefinitionHolder proxyHolder = ScopedProxyUtils.createScopedProxy(new BeanDefinitionHolder(targetDefinition, "myBean"), registry, false);
107-
assertThat(proxyHolder).isNotNull();
108-
final BeanDefinition proxyBeanDefinition = proxyHolder.getBeanDefinition();
109-
assertThat(proxyBeanDefinition).isNotNull();
105+
BeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
106+
BeanDefinitionHolder proxyHolder = ScopedProxyUtils.createScopedProxy(
107+
new BeanDefinitionHolder(targetDefinition, "myBean"), registry, false);
108+
BeanDefinition proxyBeanDefinition = proxyHolder.getBeanDefinition();
110109

111110
assertThat(proxyBeanDefinition.getRole()).isEqualTo(BeanDefinition.ROLE_INFRASTRUCTURE);
112111
assertThat(proxyBeanDefinition).isInstanceOf(RootBeanDefinition.class);
113112
assertThat(proxyBeanDefinition.getPropertyValues()).hasSize(2);
114113
assertThat(proxyBeanDefinition.getPropertyValues().get("proxyTargetClass")).isEqualTo(false);
115-
assertThat(proxyBeanDefinition.getPropertyValues().get("targetBeanName")).isEqualTo(ScopedProxyUtils.getTargetBeanName("myBean"));
114+
assertThat(proxyBeanDefinition.getPropertyValues().get("targetBeanName")).isEqualTo(
115+
ScopedProxyUtils.getTargetBeanName("myBean"));
116116

117-
final RootBeanDefinition rootBeanDefinition = (RootBeanDefinition) proxyBeanDefinition;
117+
RootBeanDefinition rootBeanDefinition = (RootBeanDefinition) proxyBeanDefinition;
118118
assertThat(rootBeanDefinition.getQualifiers()).hasSize(1);
119119
assertThat(rootBeanDefinition.hasQualifier("myQualifier")).isTrue();
120120
assertThat(rootBeanDefinition.getSource()).isEqualTo("theSource");
121121
}
122122

123123
@Test
124124
void createScopedProxyTargetCleansAutowireSettingsInTargetDefinition() {
125-
final AbstractBeanDefinition targetDefinition = new GenericBeanDefinition();
125+
AbstractBeanDefinition targetDefinition = new GenericBeanDefinition();
126126
targetDefinition.setAutowireCandidate(true);
127127
targetDefinition.setDefaultCandidate(true);
128128
targetDefinition.setPrimary(true);
129+
targetDefinition.setFallback(true);
129130

130-
final BeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
131-
final BeanDefinitionHolder proxyHolder = ScopedProxyUtils.createScopedProxy(new BeanDefinitionHolder(targetDefinition, "myBean"), registry, false);
132-
assertThat(proxyHolder).isNotNull();
133-
final BeanDefinition proxyBeanDefinition = proxyHolder.getBeanDefinition();
134-
assertThat(proxyBeanDefinition).isNotNull();
131+
BeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
132+
ScopedProxyUtils.createScopedProxy(
133+
new BeanDefinitionHolder(targetDefinition, "myBean"), registry, false);
135134

136135
assertThat(targetDefinition.isAutowireCandidate()).isFalse();
137136
assertThat(targetDefinition.isDefaultCandidate()).isFalse();
138137
assertThat(targetDefinition.isPrimary()).isFalse();
138+
assertThat(targetDefinition.isFallback()).isFalse();
139139
}
140+
140141
}

0 commit comments

Comments
 (0)