Make sure that AnnotationAwareOrderComparator is configured with AOT

Closes gh-28988
This commit is contained in:
Stephane Nicoll 2022-08-22 14:17:33 +02:00
parent 9b2a40a3bc
commit 8a51e31069
2 changed files with 6 additions and 2 deletions

View File

@ -30,6 +30,7 @@ import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.annotation.ContextAnnotationAutowireCandidateResolver;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
import org.springframework.javapoet.CodeBlock;
import org.springframework.javapoet.MethodSpec;
import org.springframework.javapoet.ParameterizedTypeName;
@ -85,6 +86,8 @@ class ApplicationContextInitializationCodeGenerator implements BeanFactoryInitia
APPLICATION_CONTEXT_VARIABLE);
builder.addStatement("$L.setAutowireCandidateResolver(new $T())",
BEAN_FACTORY_VARIABLE, ContextAnnotationAutowireCandidateResolver.class);
builder.addStatement("$L.setDependencyComparator($T.INSTANCE)",
BEAN_FACTORY_VARIABLE, AnnotationAwareOrderComparator.class);
for (MethodReference initializer : this.initializers) {
builder.addStatement(initializer.toInvokeCodeBlock(CodeBlock.of(BEAN_FACTORY_VARIABLE)));
}

View File

@ -141,8 +141,9 @@ class ApplicationContextAotGeneratorTests {
testCompiledResult(applicationContext, (initializer, compiled) -> {
GenericApplicationContext freshApplicationContext = toFreshApplicationContext(initializer);
assertThat(freshApplicationContext.getBeanDefinitionNames()).isEmpty();
assertThat(compiled.getSourceFile()).contains(
"beanFactory.setAutowireCandidateResolver(new ContextAnnotationAutowireCandidateResolver())");
assertThat(compiled.getSourceFile())
.contains("beanFactory.setAutowireCandidateResolver(new ContextAnnotationAutowireCandidateResolver())")
.contains("beanFactory.setDependencyComparator(AnnotationAwareOrderComparator.INSTANCE)");
});
}