无法使用弹簧反射找到使用ConditionalOnWebApplication注释的类

时间:2016-12-16 18:14:46

标签: java spring reflection annotations

在我们的WebApplication类中,我想找到所有使用@Configuration注释的类。 我使用以下代码来执行此操作:

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

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

findCandidateComponents并未返回使用@Configuration@ConditionalOnWebApplication注释的类。

我将过滤器更改为以下内容,只是为了测试:

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

我没有上课。

如何解决?

1 个答案:

答案 0 :(得分:0)

ClassPathScanningCandidateComponentProvider使用org.springframework.context.annotation.ConditionEvaluator,它可能会排除缺少的类,导致@ConditionalOnWebApplication未得到满足。

在org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider#isConditionMatch中设置一个断点,以查看conditionEvaluator在那里做了什么。

从你的问题我看不出,你想用它做什么。如果你想看看哪个@Configuration带注释的类在运行的spring上下文中,你最好使用ListableBeanfactory.getBeansWithAnnotation

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