2016-12-16 50 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,而您當前的方法會使其自己的類路徑掃描,這可能會導致不同的結果。