Skip to content

Commit aedef93

Browse files
committed
Merge AOT constructor and factory method resolution into ConstructorResolver
This moves related code into the same class, unifies candidate determination for constructors and factory methods, and gets rid of the package cycle around the hard-coded Autowired annotation check (which is implicitly coming from AutowiredAnnotationBeanPostProcessor via the determineCandidateConstructors SPI now). The API entry point for AOT pre-resolution purposes is in RegisteredBean. Closes gh-27920
1 parent 3af0c23 commit aedef93

File tree

7 files changed

+377
-468
lines changed

7 files changed

+377
-468
lines changed

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

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,12 @@ class BeanDefinitionMethodGenerator {
7676

7777
this.methodGeneratorFactory = methodGeneratorFactory;
7878
this.registeredBean = registeredBean;
79-
this.constructorOrFactoryMethod = ConstructorOrFactoryMethodResolver
80-
.resolve(registeredBean);
79+
this.constructorOrFactoryMethod = registeredBean.resolveConstructorOrFactoryMethod();
8180
this.innerBeanPropertyName = innerBeanPropertyName;
8281
this.aotContributions = aotContributions;
8382
}
8483

84+
8585
/**
8686
* Generate the method that returns the {@link BeanDefinition} to be
8787
* registered.
@@ -95,22 +95,17 @@ MethodReference generateBeanDefinitionMethod(GenerationContext generationContext
9595
registerRuntimeHintsIfNecessary(generationContext.getRuntimeHints());
9696
BeanRegistrationCodeFragments codeFragments = getCodeFragments(generationContext,
9797
beanRegistrationsCode);
98-
ClassName target = codeFragments.getTarget(this.registeredBean,
99-
this.constructorOrFactoryMethod);
98+
ClassName target = codeFragments.getTarget(this.registeredBean, this.constructorOrFactoryMethod);
10099
if (!target.canonicalName().startsWith("java.")) {
101100
GeneratedClass generatedClass = lookupGeneratedClass(generationContext, target);
102-
GeneratedMethods generatedMethods = generatedClass.getMethods()
103-
.withPrefix(getName());
104-
GeneratedMethod generatedMethod = generateBeanDefinitionMethod(
105-
generationContext, generatedClass.getName(), generatedMethods,
106-
codeFragments, Modifier.PUBLIC);
101+
GeneratedMethods generatedMethods = generatedClass.getMethods().withPrefix(getName());
102+
GeneratedMethod generatedMethod = generateBeanDefinitionMethod(generationContext,
103+
generatedClass.getName(), generatedMethods, codeFragments, Modifier.PUBLIC);
107104
return generatedMethod.toMethodReference();
108105
}
109-
GeneratedMethods generatedMethods = beanRegistrationsCode.getMethods()
110-
.withPrefix(getName());
106+
GeneratedMethods generatedMethods = beanRegistrationsCode.getMethods().withPrefix(getName());
111107
GeneratedMethod generatedMethod = generateBeanDefinitionMethod(generationContext,
112-
beanRegistrationsCode.getClassName(), generatedMethods, codeFragments,
113-
Modifier.PRIVATE);
108+
beanRegistrationsCode.getClassName(), generatedMethods, codeFragments, Modifier.PRIVATE);
114109
return generatedMethod.toMethodReference();
115110
}
116111

@@ -219,6 +214,7 @@ else if (this.constructorOrFactoryMethod instanceof Constructor<?> constructor)
219214
}
220215
}
221216

217+
222218
private static class ProxyRuntimeHintsRegistrar {
223219

224220
private final AutowireCandidateResolver candidateResolver;
@@ -231,8 +227,7 @@ public void registerRuntimeHints(RuntimeHints runtimeHints, Method method) {
231227
Class<?>[] parameterTypes = method.getParameterTypes();
232228
for (int i = 0; i < parameterTypes.length; i++) {
233229
MethodParameter methodParam = new MethodParameter(method, i);
234-
DependencyDescriptor dependencyDescriptor = new DependencyDescriptor(
235-
methodParam, true);
230+
DependencyDescriptor dependencyDescriptor = new DependencyDescriptor(methodParam, true);
236231
registerProxyIfNecessary(runtimeHints, dependencyDescriptor);
237232
}
238233
}
@@ -248,13 +243,11 @@ public void registerRuntimeHints(RuntimeHints runtimeHints, Constructor<?> const
248243
}
249244

250245
private void registerProxyIfNecessary(RuntimeHints runtimeHints, DependencyDescriptor dependencyDescriptor) {
251-
Class<?> proxyType = this.candidateResolver
252-
.getLazyResolutionProxyClass(dependencyDescriptor, null);
246+
Class<?> proxyType = this.candidateResolver.getLazyResolutionProxyClass(dependencyDescriptor, null);
253247
if (proxyType != null && Proxy.isProxyClass(proxyType)) {
254248
runtimeHints.proxies().registerJdkProxy(proxyType.getInterfaces());
255249
}
256250
}
257-
258251
}
259252

260253
}

0 commit comments

Comments
 (0)