Skip to content

Commit 738f2e8

Browse files
committed
Include interfaces for runtime hints scan.
Signed-off-by: Olga Maciaszek-Sharma <olga.maciaszek-sharma@broadcom.com>
1 parent d349a9f commit 738f2e8

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/config/GatewayMvcRuntimeHintsProcessor.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.springframework.aot.hint.MemberCategory;
3030
import org.springframework.aot.hint.ReflectionHints;
3131
import org.springframework.aot.hint.TypeReference;
32+
import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition;
3233
import org.springframework.beans.factory.aot.BeanFactoryInitializationAotContribution;
3334
import org.springframework.beans.factory.aot.BeanFactoryInitializationAotProcessor;
3435
import org.springframework.beans.factory.config.BeanDefinition;
@@ -84,7 +85,7 @@ public BeanFactoryInitializationAotContribution processAheadOfTime(ConfigurableL
8485

8586
private static Set<Class<?>> getTypesToRegister(String packageName) {
8687
Set<Class<?>> classesToAdd = new HashSet<>();
87-
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
88+
ClassPathScanningCandidateComponentProvider provider = buildProvider();
8889
provider.addIncludeFilter(new AssignableTypeFilter(Object.class));
8990
Set<BeanDefinition> components = provider.findCandidateComponents(packageName);
9091
for (BeanDefinition component : components) {
@@ -104,6 +105,17 @@ private static Set<Class<?>> getTypesToRegister(String packageName) {
104105
return classesToAdd;
105106
}
106107

108+
private static ClassPathScanningCandidateComponentProvider buildProvider() {
109+
return new ClassPathScanningCandidateComponentProvider(false) {
110+
@SuppressWarnings("NullableProblems")
111+
@Override
112+
protected boolean isCandidateComponent(AnnotatedBeanDefinition beanDefinition) {
113+
// Include both concrete classes and interfaces
114+
return beanDefinition.getMetadata().isIndependent() && !beanDefinition.getMetadata().isAnnotation();
115+
}
116+
};
117+
}
118+
107119
private static boolean shouldRegisterClass(Class<?> clazz) {
108120
Set<String> conditionClasses = beansConditionalOnClasses.getOrDefault(clazz.getName(), Collections.emptySet());
109121
for (String conditionClass : conditionClasses) {

0 commit comments

Comments
 (0)