2929import org .springframework .aot .hint .MemberCategory ;
3030import org .springframework .aot .hint .ReflectionHints ;
3131import org .springframework .aot .hint .TypeReference ;
32+ import org .springframework .beans .factory .annotation .AnnotatedBeanDefinition ;
3233import org .springframework .beans .factory .aot .BeanFactoryInitializationAotContribution ;
3334import org .springframework .beans .factory .aot .BeanFactoryInitializationAotProcessor ;
3435import 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