Skip to content

Commit 45b83d5

Browse files
committed
Register reflection hints for ApplicationProperties
Closes gh-42038
1 parent 162c929 commit 45b83d5

File tree

5 files changed

+28
-25
lines changed

5 files changed

+28
-25
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/ApplicationProperties.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.Set;
2121

2222
import org.springframework.boot.Banner.Mode;
23+
import org.springframework.boot.context.properties.bind.BindableRuntimeHintsRegistrar;
2324
import org.springframework.boot.logging.LoggingSystemProperty;
2425
import org.springframework.core.env.Environment;
2526

@@ -156,4 +157,12 @@ void setWebApplicationType(WebApplicationType webApplicationType) {
156157
this.webApplicationType = webApplicationType;
157158
}
158159

160+
static class ApplicationPropertiesRuntimeHints extends BindableRuntimeHintsRegistrar {
161+
162+
ApplicationPropertiesRuntimeHints() {
163+
super(ApplicationProperties.class);
164+
}
165+
166+
}
167+
159168
}

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@
5858
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
5959
import org.springframework.boot.Banner.Mode;
6060
import org.springframework.boot.context.properties.bind.Bindable;
61-
import org.springframework.boot.context.properties.bind.BindableRuntimeHintsRegistrar;
6261
import org.springframework.boot.context.properties.bind.Binder;
6362
import org.springframework.boot.context.properties.source.ConfigurationPropertySources;
6463
import org.springframework.boot.convert.ApplicationConversionService;
@@ -1594,14 +1593,6 @@ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
15941593

15951594
}
15961595

1597-
static class SpringApplicationRuntimeHints extends BindableRuntimeHintsRegistrar {
1598-
1599-
SpringApplicationRuntimeHints() {
1600-
super(SpringApplication.class);
1601-
}
1602-
1603-
}
1604-
16051596
/**
16061597
* Exception that can be thrown to silently exit a running {@link SpringApplication}
16071598
* without handling run failures.

spring-boot-project/spring-boot/src/main/resources/META-INF/spring/aot.factories

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
org.springframework.aot.hint.RuntimeHintsRegistrar=\
2-
org.springframework.boot.SpringApplication.SpringApplicationRuntimeHints,\
2+
org.springframework.boot.ApplicationProperties.ApplicationPropertiesRuntimeHints,\
33
org.springframework.boot.SpringApplicationBannerPrinter.SpringApplicationBannerPrinterRuntimeHints,\
44
org.springframework.boot.WebApplicationType.WebApplicationTypeRuntimeHints,\
55
org.springframework.boot.context.config.ConfigDataLocationRuntimeHints,\

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/ApplicationPropertiesTests.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818

1919
import org.junit.jupiter.api.Test;
2020

21+
import org.springframework.aot.hint.RuntimeHints;
22+
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates;
23+
import org.springframework.boot.ApplicationProperties.ApplicationPropertiesRuntimeHints;
2124
import org.springframework.boot.Banner.Mode;
2225
import org.springframework.mock.env.MockEnvironment;
2326

@@ -44,4 +47,19 @@ void bannerModeShouldBeOffIfStructuredLoggingIsEnabled() {
4447
assertThat(properties.getBannerMode(environment)).isEqualTo(Mode.OFF);
4548
}
4649

50+
@Test
51+
void shouldRegisterHints() {
52+
RuntimeHints hints = new RuntimeHints();
53+
new ApplicationPropertiesRuntimeHints().registerHints(hints, getClass().getClassLoader());
54+
assertThat(RuntimeHintsPredicates.reflection().onType(ApplicationProperties.class)).accepts(hints);
55+
assertThat(RuntimeHintsPredicates.reflection().onMethod(ApplicationProperties.class, "setBannerMode"))
56+
.accepts(hints);
57+
assertThat(RuntimeHintsPredicates.reflection().onMethod(ApplicationProperties.class, "getSources"))
58+
.accepts(hints);
59+
assertThat(RuntimeHintsPredicates.reflection().onMethod(ApplicationProperties.class, "setSources"))
60+
.accepts(hints);
61+
assertThat(RuntimeHintsPredicates.reflection().onMethod(ApplicationProperties.class, "getBannerMode"))
62+
.rejects(hints);
63+
}
64+
4765
}

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@
4444
import reactor.core.publisher.Mono;
4545

4646
import org.springframework.aot.AotDetector;
47-
import org.springframework.aot.hint.RuntimeHints;
48-
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates;
4947
import org.springframework.beans.factory.BeanCreationException;
5048
import org.springframework.beans.factory.BeanCurrentlyInCreationException;
5149
import org.springframework.beans.factory.ObjectProvider;
@@ -58,7 +56,6 @@
5856
import org.springframework.beans.factory.support.DefaultBeanNameGenerator;
5957
import org.springframework.boot.Banner.Mode;
6058
import org.springframework.boot.BootstrapRegistry.InstanceSupplier;
61-
import org.springframework.boot.SpringApplication.SpringApplicationRuntimeHints;
6259
import org.springframework.boot.availability.AvailabilityChangeEvent;
6360
import org.springframework.boot.availability.AvailabilityState;
6461
import org.springframework.boot.availability.LivenessState;
@@ -1412,18 +1409,6 @@ public void contextLoaded(ConfigurableApplicationContext context) {
14121409
then(listener).should(never()).onApplicationEvent(any(ApplicationFailedEvent.class));
14131410
}
14141411

1415-
@Test
1416-
void shouldRegisterHints() {
1417-
RuntimeHints hints = new RuntimeHints();
1418-
new SpringApplicationRuntimeHints().registerHints(hints, getClass().getClassLoader());
1419-
assertThat(RuntimeHintsPredicates.reflection().onType(SpringApplication.class)).accepts(hints);
1420-
assertThat(RuntimeHintsPredicates.reflection().onMethod(SpringApplication.class, "setBannerMode"))
1421-
.accepts(hints);
1422-
assertThat(RuntimeHintsPredicates.reflection().onMethod(SpringApplication.class, "getSources")).accepts(hints);
1423-
assertThat(RuntimeHintsPredicates.reflection().onMethod(SpringApplication.class, "setSources")).accepts(hints);
1424-
assertThat(RuntimeHintsPredicates.reflection().onMethod(SpringApplication.class, "load")).rejects(hints);
1425-
}
1426-
14271412
@Test // gh-32555
14281413
void shouldUseAotInitializer() {
14291414
SpringApplication application = new SpringApplication(ExampleAotProcessedMainClass.class);

0 commit comments

Comments
 (0)