在我们的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));`
我没有上课。
如何解决?
答案 0 :(得分:0)
ClassPathScanningCandidateComponentProvider使用org.springframework.context.annotation.ConditionEvaluator,它可能会排除缺少的类,导致@ConditionalOnWebApplication未得到满足。
在org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider#isConditionMatch中设置一个断点,以查看conditionEvaluator在那里做了什么。
从你的问题我看不出,你想用它做什么。如果你想看看哪个@Configuration带注释的类在运行的spring上下文中,你最好使用ListableBeanfactory.getBeansWithAnnotation
这为您提供正在运行的应用程序的注释bean,而您当前的方法会进行自己的类路径扫描,这可能会导致不同的结果。