17
17
package org .springframework .beans .factory .aot ;
18
18
19
19
import java .util .ArrayList ;
20
- import java .util .Collections ;
21
20
import java .util .List ;
22
21
import java .util .Map ;
23
22
import java .util .function .BiConsumer ;
32
31
import org .springframework .aot .generate .MethodReference ;
33
32
import org .springframework .aot .generate .MethodReference .ArgumentCodeGenerator ;
34
33
import org .springframework .aot .hint .MemberCategory ;
35
- import org .springframework .aot .hint .predicate .RuntimeHintsPredicates ;
36
34
import org .springframework .aot .test .generate .TestGenerationContext ;
35
+ import org .springframework .beans .factory .aot .BeanRegistrationsAotContribution .Registration ;
37
36
import org .springframework .beans .factory .support .DefaultListableBeanFactory ;
38
37
import org .springframework .beans .factory .support .RegisteredBean ;
39
38
import org .springframework .beans .factory .support .RootBeanDefinition ;
49
48
import org .springframework .javapoet .ParameterizedTypeName ;
50
49
51
50
import static org .assertj .core .api .Assertions .assertThat ;
52
- import static org .springframework .beans . factory . aot . BeanRegistrationsAotContribution . Registration ;
51
+ import static org .springframework .aot . hint . predicate . RuntimeHintsPredicates . reflection ;
53
52
54
53
/**
55
54
* Tests for {@link BeanRegistrationsAotContribution}.
61
60
*/
62
61
class BeanRegistrationsAotContributionTests {
63
62
64
- private final DefaultListableBeanFactory beanFactory ;
63
+ private final DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory () ;
65
64
66
- private final BeanDefinitionMethodGeneratorFactory methodGeneratorFactory ;
65
+ private final BeanDefinitionMethodGeneratorFactory methodGeneratorFactory = new BeanDefinitionMethodGeneratorFactory (
66
+ AotServices .factoriesAndBeans (new MockSpringFactoriesLoader (), this .beanFactory ));
67
67
68
- private TestGenerationContext generationContext ;
68
+ private TestGenerationContext generationContext = new TestGenerationContext () ;
69
69
70
- private MockBeanFactoryInitializationCode beanFactoryInitializationCode ;
71
-
72
-
73
- BeanRegistrationsAotContributionTests () {
74
- MockSpringFactoriesLoader springFactoriesLoader = new MockSpringFactoriesLoader ();
75
- this .beanFactory = new DefaultListableBeanFactory ();
76
- this .methodGeneratorFactory = new BeanDefinitionMethodGeneratorFactory (
77
- AotServices .factoriesAndBeans (springFactoriesLoader , this .beanFactory ));
78
- this .generationContext = new TestGenerationContext ();
79
- this .beanFactoryInitializationCode = new MockBeanFactoryInitializationCode (this .generationContext );
80
- }
70
+ private MockBeanFactoryInitializationCode beanFactoryInitializationCode = new MockBeanFactoryInitializationCode (this .generationContext );
81
71
82
72
83
73
@ Test
84
74
void applyToAppliesContribution () {
85
- RegisteredBean registeredBean = registerBean (
86
- new RootBeanDefinition (TestBean .class ));
87
- BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator (
88
- this .methodGeneratorFactory , registeredBean , null ,
89
- Collections .emptyList ());
75
+ RegisteredBean registeredBean = registerBean (new RootBeanDefinition (TestBean .class ));
76
+ BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator (this .methodGeneratorFactory ,
77
+ registeredBean , null , List .of ());
90
78
BeanRegistrationsAotContribution contribution = createContribution (generator );
91
79
contribution .applyTo (this .generationContext , this .beanFactoryInitializationCode );
92
80
compile ((consumer , compiled ) -> {
@@ -98,11 +86,9 @@ void applyToAppliesContribution() {
98
86
99
87
@ Test
100
88
void applyToAppliesContributionWithAliases () {
101
- RegisteredBean registeredBean = registerBean (
102
- new RootBeanDefinition (TestBean .class ));
103
- BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator (
104
- this .methodGeneratorFactory , registeredBean , null ,
105
- Collections .emptyList ());
89
+ RegisteredBean registeredBean = registerBean (new RootBeanDefinition (TestBean .class ));
90
+ BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator (this .methodGeneratorFactory ,
91
+ registeredBean , null , List .of ());
106
92
BeanRegistrationsAotContribution contribution = createContribution (generator , "testAlias" );
107
93
contribution .applyTo (this .generationContext , this .beanFactoryInitializationCode );
108
94
compile ((consumer , compiled ) -> {
@@ -117,11 +103,9 @@ void applyToWhenHasNameGeneratesPrefixedFeatureName() {
117
103
this .generationContext = new TestGenerationContext (
118
104
new ClassNameGenerator (TestGenerationContext .TEST_TARGET , "Management" ));
119
105
this .beanFactoryInitializationCode = new MockBeanFactoryInitializationCode (this .generationContext );
120
- RegisteredBean registeredBean = registerBean (
121
- new RootBeanDefinition (TestBean .class ));
122
- BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator (
123
- this .methodGeneratorFactory , registeredBean , null ,
124
- Collections .emptyList ());
106
+ RegisteredBean registeredBean = registerBean (new RootBeanDefinition (TestBean .class ));
107
+ BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator (this .methodGeneratorFactory ,
108
+ registeredBean , null , List .of ());
125
109
BeanRegistrationsAotContribution contribution = createContribution (generator );
126
110
contribution .applyTo (this .generationContext , this .beanFactoryInitializationCode );
127
111
compile ((consumer , compiled ) -> {
@@ -133,19 +117,15 @@ void applyToWhenHasNameGeneratesPrefixedFeatureName() {
133
117
@ Test
134
118
void applyToCallsRegistrationsWithBeanRegistrationsCode () {
135
119
List <BeanRegistrationsCode > beanRegistrationsCodes = new ArrayList <>();
136
- RegisteredBean registeredBean = registerBean (
137
- new RootBeanDefinition (TestBean .class ));
138
- BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator (
139
- this .methodGeneratorFactory , registeredBean , null ,
140
- Collections .emptyList ()) {
120
+ RegisteredBean registeredBean = registerBean (new RootBeanDefinition (TestBean .class ));
121
+ BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator (this .methodGeneratorFactory ,
122
+ registeredBean , null , List .of ()) {
141
123
142
124
@ Override
143
- MethodReference generateBeanDefinitionMethod (
144
- GenerationContext generationContext ,
125
+ MethodReference generateBeanDefinitionMethod (GenerationContext generationContext ,
145
126
BeanRegistrationsCode beanRegistrationsCode ) {
146
127
beanRegistrationsCodes .add (beanRegistrationsCode );
147
- return super .generateBeanDefinitionMethod (generationContext ,
148
- beanRegistrationsCode );
128
+ return super .generateBeanDefinitionMethod (generationContext , beanRegistrationsCode );
149
129
}
150
130
151
131
};
@@ -158,15 +138,12 @@ MethodReference generateBeanDefinitionMethod(
158
138
159
139
@ Test
160
140
void applyToRegisterReflectionHints () {
161
- List <BeanRegistrationsCode > beanRegistrationsCodes = new ArrayList <>();
162
- RegisteredBean registeredBean = registerBean (
163
- new RootBeanDefinition (TestBean .class ));
164
- BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator (
165
- this .methodGeneratorFactory , registeredBean , null ,
166
- Collections .emptyList ());
141
+ RegisteredBean registeredBean = registerBean (new RootBeanDefinition (TestBean .class ));
142
+ BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator (this .methodGeneratorFactory ,
143
+ registeredBean , null , List .of ());
167
144
BeanRegistrationsAotContribution contribution = createContribution (generator );
168
145
contribution .applyTo (this .generationContext , this .beanFactoryInitializationCode );
169
- assertThat (RuntimeHintsPredicates . reflection ().onType (TestBean .class )
146
+ assertThat (reflection ().onType (TestBean .class )
170
147
.withMemberCategory (MemberCategory .INTROSPECT_DECLARED_METHODS ))
171
148
.accepts (this .generationContext .getRuntimeHints ());
172
149
}
@@ -178,20 +155,18 @@ private RegisteredBean registerBean(RootBeanDefinition rootBeanDefinition) {
178
155
}
179
156
180
157
@ SuppressWarnings ({ "unchecked" , "cast" })
181
- private void compile (
182
- BiConsumer <Consumer <DefaultListableBeanFactory >, Compiled > result ) {
183
- MethodReference beanRegistrationsMethodReference = this .beanFactoryInitializationCode
184
- .getInitializers ().get (0 );
185
- MethodReference aliasesMethodReference = this .beanFactoryInitializationCode
186
- .getInitializers ().get (1 );
158
+ private void compile (BiConsumer <Consumer <DefaultListableBeanFactory >, Compiled > result ) {
159
+ MethodReference beanRegistrationsMethodReference = this .beanFactoryInitializationCode .getInitializers ().get (0 );
160
+ MethodReference aliasesMethodReference = this .beanFactoryInitializationCode .getInitializers ().get (1 );
187
161
this .beanFactoryInitializationCode .getTypeBuilder ().set (type -> {
188
162
ArgumentCodeGenerator beanFactory = ArgumentCodeGenerator .of (DefaultListableBeanFactory .class , "beanFactory" );
189
163
ClassName className = this .beanFactoryInitializationCode .getClassName ();
190
164
CodeBlock beanRegistrationsMethodInvocation = beanRegistrationsMethodReference .toInvokeCodeBlock (beanFactory , className );
191
165
CodeBlock aliasesMethodInvocation = aliasesMethodReference .toInvokeCodeBlock (beanFactory , className );
192
166
type .addModifiers (Modifier .PUBLIC );
193
167
type .addSuperinterface (ParameterizedTypeName .get (Consumer .class , DefaultListableBeanFactory .class ));
194
- type .addMethod (MethodSpec .methodBuilder ("accept" ).addModifiers (Modifier .PUBLIC )
168
+ type .addMethod (MethodSpec .methodBuilder ("accept" )
169
+ .addModifiers (Modifier .PUBLIC )
195
170
.addParameter (DefaultListableBeanFactory .class , "beanFactory" )
196
171
.addStatement (beanRegistrationsMethodInvocation )
197
172
.addStatement (aliasesMethodInvocation )
@@ -204,7 +179,8 @@ private void compile(
204
179
205
180
private BeanRegistrationsAotContribution createContribution (
206
181
BeanDefinitionMethodGenerator methodGenerator ,String ... aliases ) {
207
- return new BeanRegistrationsAotContribution (Map .of (new BeanRegistrationKey ("testBean" , TestBean .class ), new Registration (methodGenerator , aliases )));
182
+ return new BeanRegistrationsAotContribution (
183
+ Map .of (new BeanRegistrationKey ("testBean" , TestBean .class ), new Registration (methodGenerator , aliases )));
208
184
}
209
185
210
186
}
0 commit comments