diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java index 4e50c22a746..96a75f5f9a7 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java @@ -999,6 +999,7 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo .addStatement("throw new $T(\"Failed to read metadata for '$L'\", ex)", IllegalStateException.class, beanRegistrarEntry.getKey()) .endControlFlow(); + generationContext.getRuntimeHints().resources().registerType(TypeReference.of(beanRegistrarEntry.getKey())); } code.addStatement("$L.register(new $T(($T)$L, $L, $L, $L.getClass(), $L), $L)", beanRegistrarName, BeanRegistryAdapter.class, BeanDefinitionRegistry.class, BeanFactoryInitializationCode.BEAN_FACTORY_VARIABLE, diff --git a/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorAotContributionTests.java b/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorAotContributionTests.java index 14835276e0c..44abc698b9e 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorAotContributionTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorAotContributionTests.java @@ -176,6 +176,24 @@ public class ConfigurationClassPostProcessorAotContributionTests { )); } + @Test + void applyToWhenHasImportAwareBeanRegistrarRegistersHints() { + BeanFactoryInitializationAotContribution contribution = getContribution(BeanRegistrarTests.ImportAwareConfiguration.class); + contribution.applyTo(generationContext, beanFactoryInitializationCode); + assertThat(generationContext.getRuntimeHints().resources().resourcePatternHints()) + .singleElement() + .satisfies(resourceHint -> assertThat(resourceHint.getIncludes()) + .map(ResourcePatternHint::getPattern) + .containsExactlyInAnyOrder( + "/", + "org", + "org/springframework", + "org/springframework/context", + "org/springframework/context/annotation", + "org/springframework/context/annotation/ConfigurationClassPostProcessorAotContributionTests$BeanRegistrarTests$ImportAwareConfiguration.class" + )); + } + @SuppressWarnings("unchecked") private void compile(BiConsumer, Compiled> result) { MethodReference methodReference = beanFactoryInitializationCode.getInitializers().get(0);