diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java index 7e60a37d47..62434d1d4f 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java @@ -420,9 +420,8 @@ public class SpringApplication { initializers.stream().filter(AotApplicationContextInitializer.class::isInstance).toList()); if (aotInitializers.isEmpty()) { String initializerClassName = this.mainApplicationClass.getName() + "__ApplicationContextInitializer"; - AotApplicationContextInitializer initializer = AotApplicationContextInitializer - .forInitializerClasses(initializerClassName); - aotInitializers.add(initializer); + aotInitializers.add(AotApplicationContextInitializer + .forInitializerClasses(initializerClassName)); } initializers.removeAll(aotInitializers); initializers.addAll(0, aotInitializers); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java index 575519b8d0..e3c069ac5f 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java @@ -41,6 +41,7 @@ import org.mockito.InOrder; import org.mockito.Mockito; import reactor.core.publisher.Mono; +import org.springframework.aot.AotDetector; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; import org.springframework.beans.CachedIntrospectionResults; @@ -1343,6 +1344,21 @@ class SpringApplicationTests { assertThat(RuntimeHintsPredicates.reflection().onMethod(SpringApplication.class, "load")).rejects(hints); } + @Test // gh-32555 + void shouldUseAotInitializer() { + SpringApplication application = new SpringApplication(ExampleAotProcessedMainClass.class); + application.setWebApplicationType(WebApplicationType.NONE); + application.setMainApplicationClass(ExampleAotProcessedMainClass.class); + System.setProperty(AotDetector.AOT_ENABLED, "true"); + try { + ApplicationContext context = application.run(); + assertThat(context.getBean("test")).isEqualTo("test"); + } + finally { + System.clearProperty(AotDetector.AOT_ENABLED); + } + } + private ArgumentMatcher isAvailabilityChangeEventWithState( S state) { return (argument) -> (argument instanceof AvailabilityChangeEvent) @@ -1891,4 +1907,18 @@ class SpringApplicationTests { } + static class ExampleAotProcessedMainClass { + + } + + static class ExampleAotProcessedMainClass__ApplicationContextInitializer + implements ApplicationContextInitializer { + + @Override + public void initialize(ConfigurableApplicationContext applicationContext) { + applicationContext.getBeanFactory().registerSingleton("test", "test"); + } + + } + }