2016-12-16 31 views
0

在我们的WebApplication类中,我想查找所有使用@Configuration注解的类。 我使用下面的代码来做到这一点:使用Spring反射找不到使用ConditionalOnWebApplication注释的类

ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false); 
scanner.addIncludeFilter(new AnnotationTypeFilter(Configuration.class)); 

Set<BeanDefinition> configurationBeans = scanner.findCandidateComponents("com.company"); 

findCandidateComponents不returnnig与两个@Configuration@ConditionalOnWebApplication注释的类。

我的过滤器换到下面,只是为了测试:

scanner.addIncludeFilter(new `AnnotationTypeFilter(ConditionalOnWebApplication.class));` 

和我没有课。

如何解决?

回答

0

ClassPathScanningCandidateComponentProvider使用org.springframework.context.annotation.ConditionEvaluator可能会排除缺少的类,因为未满足@ConditionalOnWebApplication。

在org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider#isConditionMatch处设置断点,以查看conditionEvaluator在此处执行的操作。

从你的问题我看不到,你想用什么。如果您想了解哪些@Configuration注释类位于运行的春季上下文中,您最好使用ListableBeanfactory.getBeansWithAnnotation

这会为您提供正在运行的应用程序的带注释的bean,而您当前的方法会使其自己的类路径扫描,这可能会导致不同的结果。