Skip to content

Commit 711a63a

Browse files
committed
Polish
See gh-29391
1 parent 9235e39 commit 711a63a

File tree

4 files changed

+39
-47
lines changed

4 files changed

+39
-47
lines changed

spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanRegistrationsAotContribution.java

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,14 @@
3030
import org.springframework.javapoet.ClassName;
3131
import org.springframework.javapoet.CodeBlock;
3232
import org.springframework.javapoet.MethodSpec;
33-
import org.springframework.util.MultiValueMap;
3433

3534
/**
3635
* AOT contribution from a {@link BeanRegistrationsAotProcessor} used to
3736
* register bean definitions and aliases.
3837
*
3938
* @author Phillip Webb
4039
* @author Sebastien Deleuze
40+
* @author Stephane Nicoll
4141
* @since 6.0
4242
* @see BeanRegistrationsAotProcessor
4343
*/
@@ -46,16 +46,10 @@ class BeanRegistrationsAotContribution
4646

4747
private static final String BEAN_FACTORY_PARAMETER_NAME = "beanFactory";
4848

49-
private final Map<String, BeanDefinitionMethodGenerator> registrations;
50-
51-
private final MultiValueMap<String, String> aliases;
52-
53-
54-
BeanRegistrationsAotContribution(
55-
Map<String, BeanDefinitionMethodGenerator> registrations, MultiValueMap<String, String> aliases) {
49+
private final Map<String, Registration> registrations;
5650

51+
BeanRegistrationsAotContribution(Map<String, Registration> registrations) {
5752
this.registrations = registrations;
58-
this.aliases = aliases;
5953
}
6054

6155

@@ -86,8 +80,8 @@ private void generateRegisterBeanDefinitionsMethod(MethodSpec.Builder method,
8680
method.addParameter(DefaultListableBeanFactory.class,
8781
BEAN_FACTORY_PARAMETER_NAME);
8882
CodeBlock.Builder code = CodeBlock.builder();
89-
this.registrations.forEach((beanName, beanDefinitionMethodGenerator) -> {
90-
MethodReference beanDefinitionMethod = beanDefinitionMethodGenerator
83+
this.registrations.forEach((beanName, registration) -> {
84+
MethodReference beanDefinitionMethod = registration.methodGenerator
9185
.generateBeanDefinitionMethod(generationContext,
9286
beanRegistrationsCode);
9387
CodeBlock methodInvocation = beanDefinitionMethod.toInvokeCodeBlock(
@@ -105,12 +99,22 @@ private void generateRegisterAliasesMethod(MethodSpec.Builder method) {
10599
method.addParameter(DefaultListableBeanFactory.class,
106100
BEAN_FACTORY_PARAMETER_NAME);
107101
CodeBlock.Builder code = CodeBlock.builder();
108-
this.aliases.forEach((beanName, beanAliases) ->
109-
beanAliases.forEach(alias -> code.addStatement("$L.registerAlias($S, $S)", BEAN_FACTORY_PARAMETER_NAME,
110-
beanName, alias)));
102+
this.registrations.forEach((beanName, registration) -> {
103+
for (String alias : registration.aliases) {
104+
code.addStatement("$L.registerAlias($S, $S)",
105+
BEAN_FACTORY_PARAMETER_NAME, beanName, alias);
106+
}
107+
});
111108
method.addCode(code.build());
112109
}
113110

111+
/**
112+
* Gather the necessary information to register a particular bean.
113+
* @param methodGenerator the {@link BeanDefinitionMethodGenerator} to use
114+
* @param aliases the bean aliases, if any
115+
*/
116+
record Registration(BeanDefinitionMethodGenerator methodGenerator, String[] aliases) {}
117+
114118

115119
/**
116120
* {@link BeanRegistrationsCode} with generation support.

spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanRegistrationsAotProcessor.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,17 @@
1919
import java.util.LinkedHashMap;
2020
import java.util.Map;
2121

22+
import org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.Registration;
2223
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
2324
import org.springframework.beans.factory.support.RegisteredBean;
24-
import org.springframework.util.LinkedMultiValueMap;
25-
import org.springframework.util.MultiValueMap;
2625

2726
/**
2827
* {@link BeanFactoryInitializationAotProcessor} that contributes code to
2928
* register beans.
3029
*
3130
* @author Phillip Webb
3231
* @author Sebastien Deleuze
32+
* @author Stephane Nicoll
3333
* @since 6.0
3434
*/
3535
class BeanRegistrationsAotProcessor implements BeanFactoryInitializationAotProcessor {
@@ -38,23 +38,20 @@ class BeanRegistrationsAotProcessor implements BeanFactoryInitializationAotProce
3838
public BeanRegistrationsAotContribution processAheadOfTime(ConfigurableListableBeanFactory beanFactory) {
3939
BeanDefinitionMethodGeneratorFactory beanDefinitionMethodGeneratorFactory =
4040
new BeanDefinitionMethodGeneratorFactory(beanFactory);
41-
Map<String, BeanDefinitionMethodGenerator> registrations = new LinkedHashMap<>();
42-
MultiValueMap<String, String> aliases = new LinkedMultiValueMap<>();
41+
Map<String, Registration> registrations = new LinkedHashMap<>();
4342
for (String beanName : beanFactory.getBeanDefinitionNames()) {
4443
RegisteredBean registeredBean = RegisteredBean.of(beanFactory, beanName);
4544
BeanDefinitionMethodGenerator beanDefinitionMethodGenerator = beanDefinitionMethodGeneratorFactory
4645
.getBeanDefinitionMethodGenerator(registeredBean);
4746
if (beanDefinitionMethodGenerator != null) {
48-
registrations.put(beanName, beanDefinitionMethodGenerator);
49-
}
50-
for (String alias : beanFactory.getAliases(beanName)) {
51-
aliases.add(beanName, alias);
47+
registrations.put(beanName, new Registration(beanDefinitionMethodGenerator,
48+
beanFactory.getAliases(beanName)));
5249
}
5350
}
5451
if (registrations.isEmpty()) {
5552
return null;
5653
}
57-
return new BeanRegistrationsAotContribution(registrations, aliases);
54+
return new BeanRegistrationsAotContribution(registrations);
5855
}
5956

6057
}

spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanRegistrationsAotContributionTests.java

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import java.util.ArrayList;
2020
import java.util.Collections;
21-
import java.util.LinkedHashMap;
2221
import java.util.List;
2322
import java.util.Map;
2423
import java.util.function.BiConsumer;
@@ -46,16 +45,16 @@
4645
import org.springframework.javapoet.CodeBlock;
4746
import org.springframework.javapoet.MethodSpec;
4847
import org.springframework.javapoet.ParameterizedTypeName;
49-
import org.springframework.util.LinkedMultiValueMap;
50-
import org.springframework.util.MultiValueMap;
5148

5249
import static org.assertj.core.api.Assertions.assertThat;
50+
import static org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.Registration;
5351

5452
/**
5553
* Tests for {@link BeanRegistrationsAotContribution}.
5654
*
5755
* @author Phillip Webb
5856
* @author Sebastien Deleuze
57+
* @author Stephane Nicoll
5958
*/
6059
class BeanRegistrationsAotContributionTests {
6160

@@ -80,15 +79,12 @@ class BeanRegistrationsAotContributionTests {
8079

8180
@Test
8281
void applyToAppliesContribution() {
83-
Map<String, BeanDefinitionMethodGenerator> registrations = new LinkedHashMap<>();
8482
RegisteredBean registeredBean = registerBean(
8583
new RootBeanDefinition(TestBean.class));
8684
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
8785
this.methodGeneratorFactory, registeredBean, null,
8886
Collections.emptyList());
89-
registrations.put("testBean", generator);
90-
BeanRegistrationsAotContribution contribution = new BeanRegistrationsAotContribution(
91-
registrations, new LinkedMultiValueMap<>());
87+
BeanRegistrationsAotContribution contribution = createContribution(generator);
9288
contribution.applyTo(this.generationContext, this.beanFactoryInitializationCode);
9389
compile((consumer, compiled) -> {
9490
DefaultListableBeanFactory freshBeanFactory = new DefaultListableBeanFactory();
@@ -99,17 +95,12 @@ void applyToAppliesContribution() {
9995

10096
@Test
10197
void applyToAppliesContributionWithAliases() {
102-
Map<String, BeanDefinitionMethodGenerator> registrations = new LinkedHashMap<>();
10398
RegisteredBean registeredBean = registerBean(
10499
new RootBeanDefinition(TestBean.class));
105100
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
106101
this.methodGeneratorFactory, registeredBean, null,
107102
Collections.emptyList());
108-
registrations.put("testBean", generator);
109-
MultiValueMap<String, String> aliases = new LinkedMultiValueMap<>();
110-
aliases.add("testBean", "testAlias");
111-
BeanRegistrationsAotContribution contribution = new BeanRegistrationsAotContribution(
112-
registrations, aliases);
103+
BeanRegistrationsAotContribution contribution = createContribution(generator, "testAlias");
113104
contribution.applyTo(this.generationContext, this.beanFactoryInitializationCode);
114105
compile((consumer, compiled) -> {
115106
DefaultListableBeanFactory freshBeanFactory = new DefaultListableBeanFactory();
@@ -123,15 +114,12 @@ void applyToWhenHasNameGeneratesPrefixedFeatureName() {
123114
this.generationContext = new TestGenerationContext(
124115
new ClassNameGenerator(TestGenerationContext.TEST_TARGET, "Management"));
125116
this.beanFactoryInitializationCode = new MockBeanFactoryInitializationCode(this.generationContext);
126-
Map<String, BeanDefinitionMethodGenerator> registrations = new LinkedHashMap<>();
127117
RegisteredBean registeredBean = registerBean(
128118
new RootBeanDefinition(TestBean.class));
129119
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
130120
this.methodGeneratorFactory, registeredBean, null,
131121
Collections.emptyList());
132-
registrations.put("testBean", generator);
133-
BeanRegistrationsAotContribution contribution = new BeanRegistrationsAotContribution(
134-
registrations, new LinkedMultiValueMap<>());
122+
BeanRegistrationsAotContribution contribution = createContribution(generator);
135123
contribution.applyTo(this.generationContext, this.beanFactoryInitializationCode);
136124
compile((consumer, compiled) -> {
137125
SourceFile sourceFile = compiled.getSourceFile(".*BeanDefinitions");
@@ -142,7 +130,6 @@ void applyToWhenHasNameGeneratesPrefixedFeatureName() {
142130
@Test
143131
void applyToCallsRegistrationsWithBeanRegistrationsCode() {
144132
List<BeanRegistrationsCode> beanRegistrationsCodes = new ArrayList<>();
145-
Map<String, BeanDefinitionMethodGenerator> registrations = new LinkedHashMap<>();
146133
RegisteredBean registeredBean = registerBean(
147134
new RootBeanDefinition(TestBean.class));
148135
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
@@ -159,9 +146,7 @@ MethodReference generateBeanDefinitionMethod(
159146
}
160147

161148
};
162-
registrations.put("testBean", generator);
163-
BeanRegistrationsAotContribution contribution = new BeanRegistrationsAotContribution(
164-
registrations, new LinkedMultiValueMap<>());
149+
BeanRegistrationsAotContribution contribution = createContribution(generator);
165150
contribution.applyTo(this.generationContext, this.beanFactoryInitializationCode);
166151
assertThat(beanRegistrationsCodes).hasSize(1);
167152
BeanRegistrationsCode actual = beanRegistrationsCodes.get(0);
@@ -199,4 +184,9 @@ private void compile(
199184
result.accept(compiled.getInstance(Consumer.class), compiled));
200185
}
201186

187+
private BeanRegistrationsAotContribution createContribution(
188+
BeanDefinitionMethodGenerator methodGenerator,String... aliases) {
189+
return new BeanRegistrationsAotContribution(Map.of("testBean", new Registration(methodGenerator, aliases)));
190+
}
191+
202192
}

spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanRegistrationsAotProcessorTests.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,10 @@ void processAheadOfTimeReturnsBeanRegistrationsAotContributionWithAliases() {
6262
beanFactory.registerAlias("test", "testAlias");
6363
BeanRegistrationsAotContribution contribution = processor
6464
.processAheadOfTime(beanFactory);
65-
assertThat(contribution).extracting("aliases")
66-
.asInstanceOf(InstanceOfAssertFactories.MAP).hasEntrySatisfying("test", value ->
67-
assertThat(value).asList().singleElement().isEqualTo("testAlias"));
65+
assertThat(contribution).extracting("registrations").asInstanceOf(InstanceOfAssertFactories.MAP)
66+
.hasEntrySatisfying("test", registration ->
67+
assertThat(registration).extracting("aliases").asInstanceOf(InstanceOfAssertFactories.ARRAY)
68+
.singleElement().isEqualTo("testAlias"));
6869
}
6970

7071
}

0 commit comments

Comments
 (0)