|
18 | 18 |
|
19 | 19 | import org.junit.jupiter.api.Test; |
20 | 20 |
|
| 21 | +import org.springframework.beans.factory.config.BeanDefinition; |
| 22 | +import org.springframework.beans.factory.config.BeanDefinitionHolder; |
| 23 | +import org.springframework.beans.factory.support.AbstractBeanDefinition; |
| 24 | +import org.springframework.beans.factory.support.AutowireCandidateQualifier; |
| 25 | +import org.springframework.beans.factory.support.BeanDefinitionRegistry; |
| 26 | +import org.springframework.beans.factory.support.GenericBeanDefinition; |
| 27 | +import org.springframework.beans.factory.support.RootBeanDefinition; |
| 28 | +import org.springframework.beans.factory.support.SimpleBeanDefinitionRegistry; |
| 29 | + |
21 | 30 | import static org.assertj.core.api.Assertions.assertThat; |
22 | 31 | import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; |
23 | 32 |
|
| 33 | + |
24 | 34 | /** |
25 | 35 | * Tests for {@link ScopedProxyUtils}. |
26 | 36 | * |
@@ -64,4 +74,67 @@ void getOriginalBeanNameForNonScopedTarget() { |
64 | 74 | .withMessage("bean name 'myBean' does not refer to the target of a scoped proxy"); |
65 | 75 | } |
66 | 76 |
|
| 77 | + @Test |
| 78 | + void createScopedProxyTargetOvertakesAutowireSettingsToProxyBeanDefinition() { |
| 79 | + final AbstractBeanDefinition targetDefinition = new GenericBeanDefinition(); |
| 80 | + // Opposite of defaults |
| 81 | + targetDefinition.setAutowireCandidate(false); |
| 82 | + targetDefinition.setDefaultCandidate(false); |
| 83 | + targetDefinition.setPrimary(true); |
| 84 | + |
| 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); |
| 91 | + |
| 92 | + assertThat(proxyBeanDefinition.isAutowireCandidate()).isFalse(); |
| 93 | + assertThat(proxyBeanDefinition.isPrimary()).isTrue(); |
| 94 | + assertThat(((RootBeanDefinition)proxyBeanDefinition).isDefaultCandidate()).isFalse(); |
| 95 | + } |
| 96 | + |
| 97 | + @Test |
| 98 | + void createScopedProxyTargetOvertakesBeanAttributesToProxyBeanDefinition() { |
| 99 | + final GenericBeanDefinition targetDefinition = new GenericBeanDefinition(); |
| 100 | + // Opposite of defaults |
| 101 | + targetDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); |
| 102 | + targetDefinition.setSource("theSource"); |
| 103 | + targetDefinition.addQualifier(new AutowireCandidateQualifier("myQualifier")); |
| 104 | + |
| 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(); |
| 110 | + |
| 111 | + assertThat(proxyBeanDefinition.getRole()).isEqualTo(BeanDefinition.ROLE_INFRASTRUCTURE); |
| 112 | + assertThat(proxyBeanDefinition).isInstanceOf(RootBeanDefinition.class); |
| 113 | + assertThat(proxyBeanDefinition.getPropertyValues()).hasSize(2); |
| 114 | + assertThat(proxyBeanDefinition.getPropertyValues().get("proxyTargetClass")).isEqualTo(false); |
| 115 | + assertThat(proxyBeanDefinition.getPropertyValues().get("targetBeanName")).isEqualTo(ScopedProxyUtils.getTargetBeanName("myBean")); |
| 116 | + |
| 117 | + final RootBeanDefinition rootBeanDefinition = (RootBeanDefinition) proxyBeanDefinition; |
| 118 | + assertThat(rootBeanDefinition.getQualifiers()).hasSize(1); |
| 119 | + assertThat(rootBeanDefinition.hasQualifier("myQualifier")).isTrue(); |
| 120 | + assertThat(rootBeanDefinition.getSource()).isEqualTo("theSource"); |
| 121 | + } |
| 122 | + |
| 123 | + @Test |
| 124 | + void createScopedProxyTargetCleansAutowireSettingsInTargetDefinition() { |
| 125 | + final AbstractBeanDefinition targetDefinition = new GenericBeanDefinition(); |
| 126 | + targetDefinition.setAutowireCandidate(true); |
| 127 | + targetDefinition.setDefaultCandidate(true); |
| 128 | + targetDefinition.setPrimary(true); |
| 129 | + |
| 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(); |
| 135 | + |
| 136 | + assertThat(targetDefinition.isAutowireCandidate()).isFalse(); |
| 137 | + assertThat(targetDefinition.isDefaultCandidate()).isFalse(); |
| 138 | + assertThat(targetDefinition.isPrimary()).isFalse(); |
| 139 | + } |
67 | 140 | } |
0 commit comments