diff --git a/spring-context/src/main/java/org/springframework/context/support/DefaultLifecycleProcessor.java b/spring-context/src/main/java/org/springframework/context/support/DefaultLifecycleProcessor.java index c49a301938..d4d3de3519 100644 --- a/spring-context/src/main/java/org/springframework/context/support/DefaultLifecycleProcessor.java +++ b/spring-context/src/main/java/org/springframework/context/support/DefaultLifecycleProcessor.java @@ -70,7 +70,7 @@ public class DefaultLifecycleProcessor implements LifecycleProcessor, BeanFactor /** * Property name for a common context checkpoint: {@value}. * @since 6.1 - * @see #CHECKPOINT_ON_REFRESH + * @see #CHECKPOINT_ON_REFRESH_VALUE * @see org.crac.Core#checkpointRestore() */ public static final String CHECKPOINT_PROPERTY_NAME = "spring.context.checkpoint"; @@ -81,11 +81,11 @@ public class DefaultLifecycleProcessor implements LifecycleProcessor, BeanFactor * @see #CHECKPOINT_PROPERTY_NAME * @see org.crac.Core#checkpointRestore() */ - public static final String CHECKPOINT_ON_REFRESH = "onRefresh"; + public static final String CHECKPOINT_ON_REFRESH_VALUE = "onRefresh"; - private final static boolean checkpointRestoreOnRefresh = CHECKPOINT_ON_REFRESH.equalsIgnoreCase( - SpringProperties.getProperty(CHECKPOINT_PROPERTY_NAME)); + private final static boolean checkpointOnRefresh = + CHECKPOINT_ON_REFRESH_VALUE.equalsIgnoreCase(SpringProperties.getProperty(CHECKPOINT_PROPERTY_NAME)); private final Log logger = LogFactory.getLog(getClass()); @@ -169,7 +169,7 @@ public class DefaultLifecycleProcessor implements LifecycleProcessor, BeanFactor @Override public void onRefresh() { - if (checkpointRestoreOnRefresh) { + if (checkpointOnRefresh) { new CracDelegate().checkpointRestore(); } diff --git a/spring-core/src/main/java/org/springframework/aot/nativex/feature/PreComputeFieldFeature.java b/spring-core/src/main/java/org/springframework/aot/nativex/feature/PreComputeFieldFeature.java index 01c8d8d756..e730dfc921 100644 --- a/spring-core/src/main/java/org/springframework/aot/nativex/feature/PreComputeFieldFeature.java +++ b/spring-core/src/main/java/org/springframework/aot/nativex/feature/PreComputeFieldFeature.java @@ -36,7 +36,8 @@ import org.graalvm.nativeimage.hosted.Feature; */ class PreComputeFieldFeature implements Feature { - private static final boolean verbose = "verbose".equals(System.getProperty("spring.native.precompute.log")); + private static final boolean verbose = + "verbose".equalsIgnoreCase(System.getProperty("spring.native.precompute.log")); private static final Pattern[] patterns = { Pattern.compile(Pattern.quote("org.springframework.core.NativeDetector#inNativeImage")), @@ -48,14 +49,15 @@ class PreComputeFieldFeature implements Feature { Pattern.compile(Pattern.quote("org.apache.commons.logging.LogAdapter") + "#.*Present") }; - private final ThrowawayClassLoader throwawayClassLoader = new ThrowawayClassLoader(PreComputeFieldFeature.class.getClassLoader()); + private final ThrowawayClassLoader throwawayClassLoader = new ThrowawayClassLoader(getClass().getClassLoader()); + @Override public void beforeAnalysis(BeforeAnalysisAccess access) { access.registerSubtypeReachabilityHandler(this::iterateFields, Object.class); } - /* This method is invoked for every type that is reachable. */ + // This method is invoked for every type that is reachable. private void iterateFields(DuringAnalysisAccess access, Class subtype) { try { for (Field field : subtype.getDeclaredFields()) { @@ -71,12 +73,14 @@ class PreComputeFieldFeature implements Feature { Object fieldValue = provideFieldValue(field); access.registerFieldValueTransformer(field, (receiver, originalValue) -> fieldValue); if (verbose) { - System.out.println("Field " + fieldIdentifier + " set to " + fieldValue + " at build time"); + System.out.println( + "Field " + fieldIdentifier + " set to " + fieldValue + " at build time"); } } catch (Throwable ex) { if (verbose) { - System.out.println("Field " + fieldIdentifier + " will be evaluated at runtime due to this error during build time evaluation: " + ex.getMessage()); + System.out.println("Field " + fieldIdentifier + " will be evaluated at runtime " + + "due to this error during build time evaluation: " + ex); } } } @@ -88,8 +92,10 @@ class PreComputeFieldFeature implements Feature { } } - /* This method is invoked when the field value is written to the image heap or the field is constant folded. */ - private Object provideFieldValue(Field field) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException { + // This method is invoked when the field value is written to the image heap or the field is constant folded. + private Object provideFieldValue(Field field) + throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException { + Class throwawayClass = this.throwawayClassLoader.loadClass(field.getDeclaringClass().getName()); Field throwawayField = throwawayClass.getDeclaredField(field.getName()); throwawayField.setAccessible(true);