Skip to content

Commit 63cfeb0

Browse files
committed
Merge branch '3.5.x'
Closes gh-48476
2 parents f9d97af + 0578bc5 commit 63cfeb0

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

core/spring-boot/src/main/java/org/springframework/boot/support/EnvironmentPostProcessorApplicationListener.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626

2727
import org.springframework.aot.AotDetector;
2828
import org.springframework.aot.generate.GeneratedClass;
29+
import org.springframework.aot.generate.GeneratedTypeReference;
2930
import org.springframework.aot.generate.GenerationContext;
31+
import org.springframework.aot.hint.MemberCategory;
3032
import org.springframework.beans.BeanInstantiationException;
3133
import org.springframework.beans.BeanUtils;
3234
import org.springframework.beans.factory.aot.BeanFactoryInitializationAotContribution;
@@ -62,7 +64,7 @@
6264
*/
6365
public class EnvironmentPostProcessorApplicationListener implements SmartApplicationListener, Ordered {
6466

65-
private static final String AOT_FEATURE_NAME = "EnvironmentPostProcessor";
67+
static final String AOT_FEATURE_NAME = "EnvironmentPostProcessor";
6668

6769
/**
6870
* The default order for the processor.
@@ -238,6 +240,10 @@ public void applyTo(GenerationContext generationContext,
238240
method.addParameter(SpringApplication.class, "application");
239241
method.addCode(generateActiveProfilesInitializeCode());
240242
});
243+
generationContext.getRuntimeHints()
244+
.reflection()
245+
.registerType(GeneratedTypeReference.of(generatedClass.getName()),
246+
MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS);
241247
}
242248

243249
private CodeBlock generateActiveProfilesInitializeCode() {

core/spring-boot/src/test/java/org/springframework/boot/support/EnvironmentPostProcessorApplicationListenerTests.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@
3636
import org.junit.jupiter.api.io.TempDir;
3737

3838
import org.springframework.aot.AotDetector;
39+
import org.springframework.aot.generate.GenerationContext;
40+
import org.springframework.aot.hint.MemberCategory;
41+
import org.springframework.aot.hint.TypeReference;
42+
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates;
3943
import org.springframework.aot.test.generate.TestGenerationContext;
4044
import org.springframework.beans.factory.aot.BeanFactoryInitializationAotContribution;
4145
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
@@ -211,6 +215,24 @@ void aotContributionRegistersActiveProfiles() {
211215
});
212216
}
213217

218+
@Test
219+
void aotContributionRegistersReflectionHints() {
220+
GenericApplicationContext applicationContext = new GenericApplicationContext();
221+
ConfigurableEnvironment environment = new StandardEnvironment();
222+
environment.setActiveProfiles("one", "two");
223+
applicationContext.getBeanFactory().registerSingleton("environment", environment);
224+
BeanFactoryInitializationAotContribution aotContribution = new EnvironmentBeanFactoryInitializationAotProcessor()
225+
.processAheadOfTime(applicationContext.getBeanFactory());
226+
assertThat(aotContribution).isNotNull();
227+
GenerationContext generationContext = new TestGenerationContext();
228+
aotContribution.applyTo(generationContext, null);
229+
assertThat(RuntimeHintsPredicates.reflection()
230+
.onType(TypeReference.of(TestGenerationContext.TEST_TARGET + "__"
231+
+ EnvironmentPostProcessorApplicationListener.AOT_FEATURE_NAME))
232+
.withMemberCategory(MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS))
233+
.accepts(generationContext.getRuntimeHints());
234+
}
235+
214236
@Test
215237
void shouldUseAotEnvironmentPostProcessor() {
216238
SpringApplication application = new SpringApplication(ExampleAotProcessedApp.class);

0 commit comments

Comments
 (0)