diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/AotProcessingHook.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/AotProcessingHook.java deleted file mode 100644 index eee7f07c51..0000000000 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/AotProcessingHook.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2012-2022 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot; - -import org.springframework.boot.SpringApplicationHooks.Hook; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.support.GenericApplicationContext; -import org.springframework.util.Assert; - -/** - * A {@link Hook} used to prevent standard refresh of the application's context, ready for - * subsequent {@link GenericApplicationContext#refreshForAotProcessing() AOT processing}. - * - * @author Andy Wilkinson - */ -class AotProcessingHook implements Hook { - - private GenericApplicationContext context; - - @Override - public boolean preRefresh(SpringApplication application, ConfigurableApplicationContext context) { - Assert.isInstanceOf(GenericApplicationContext.class, context, - () -> "AOT processing requires a GenericApplicationContext but got a " + context.getClass().getName()); - this.context = (GenericApplicationContext) context; - return false; - } - - @Override - public void postRun(SpringApplication application, ConfigurableApplicationContext context) { - throw new MainMethodSilentExitException(); - } - - GenericApplicationContext getApplicationContext() { - return this.context; - } - - /** - * Internal exception used to prevent main method to continue once - * {@code SpringApplication#run} completes. - */ - static class MainMethodSilentExitException extends RuntimeException { - - } - -} diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/AotProcessor.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/AotProcessor.java index 733d2bc7fa..923a9d17ac 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/AotProcessor.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/AotProcessor.java @@ -36,7 +36,9 @@ import org.springframework.aot.hint.ReflectionHints; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.TypeReference; import org.springframework.aot.nativex.FileNativeConfigurationWriter; -import org.springframework.boot.AotProcessingHook.MainMethodSilentExitException; +import org.springframework.boot.SpringApplicationHooks.Hook; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.aot.ApplicationContextAotGenerator; import org.springframework.context.support.GenericApplicationContext; import org.springframework.javapoet.ClassName; @@ -100,7 +102,7 @@ public class AotProcessor { */ public void process() { deleteExistingOutput(); - AotProcessingHook hook = new AotProcessingHook(); + AotProcessorHook hook = new AotProcessorHook(); SpringApplicationHooks.withHook(hook, this::callApplicationMainMethod); GenericApplicationContext applicationContext = hook.getApplicationContext(); Assert.notNull(applicationContext, "No application context available after calling main method of '" @@ -129,7 +131,7 @@ public class AotProcessor { } catch (InvocationTargetException ex) { Throwable targetException = ex.getTargetException(); - if (!(targetException instanceof MainMethodSilentExitException)) { + if (!(targetException instanceof SilentExitException)) { throw (targetException instanceof RuntimeException runtimeEx) ? runtimeEx : new RuntimeException(targetException); } @@ -225,4 +227,40 @@ public class AotProcessor { aotProcess.process(); } + /** + * Hook used to capture the {@link ApplicationContext} and trigger early exit of main + * method. + */ + private static class AotProcessorHook implements Hook { + + private GenericApplicationContext context; + + @Override + public boolean preRefresh(SpringApplication application, ConfigurableApplicationContext context) { + Assert.isInstanceOf(GenericApplicationContext.class, context, + () -> "AOT processing requires a GenericApplicationContext but got a " + + context.getClass().getName()); + this.context = (GenericApplicationContext) context; + return false; + } + + @Override + public void postRun(SpringApplication application, ConfigurableApplicationContext context) { + throw new SilentExitException(); + } + + GenericApplicationContext getApplicationContext() { + return this.context; + } + + } + + /** + * Internal exception used to prevent main method to continue once + * {@code SpringApplication#run} completes. + */ + private static class SilentExitException extends RuntimeException { + + } + }