Browse Source

Make sure that AnnotationAwareOrderComparator is configured with AOT

Closes gh-28988
pull/28958/head
Stephane Nicoll 3 years ago
parent
commit
8a51e31069
  1. 3
      spring-context/src/main/java/org/springframework/context/aot/ApplicationContextInitializationCodeGenerator.java
  2. 5
      spring-context/src/test/java/org/springframework/context/aot/ApplicationContextAotGeneratorTests.java

3
spring-context/src/main/java/org/springframework/context/aot/ApplicationContextInitializationCodeGenerator.java

@ -30,6 +30,7 @@ import org.springframework.beans.factory.support.DefaultListableBeanFactory; @@ -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 @@ -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)));
}

5
spring-context/src/test/java/org/springframework/context/aot/ApplicationContextAotGeneratorTests.java

@ -141,8 +141,9 @@ class ApplicationContextAotGeneratorTests { @@ -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)");
});
}

Loading…
Cancel
Save