2016-12-16 11 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@Configuration@ConditionalOnWebApplication両方で注釈を付けたクラスをreturnnigされていません。

私はちょうどテストを、以下にフィルタを変更します。

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

と私はクラスを得ませんでした。

どうすれば解決できますか?

答えて

0

ClassPathScanningCandidateComponentProviderは、欠落しているクラスを除外する可能性のあるorg.springframework.context.annotation.ConditionEvaluatorを使用します。原因は@ConditionalOnWebApplicationが満たされていないためです。

org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider#isConditionMatchにブレークポイントを設定すると、そこでのエスカレータの動作を確認できます。

あなたの質問から私はあなたがこれを使用したいと思っています。どの@Configurationアノテートされたクラスが実行中のSpringコンテキストにあるかを確認したい場合はListableBeanfactory.getBeansWithAnnotation

これは実行中のアプリケーションの注釈付きBeanを正確に表示しますが、結果が異なる可能性があります。

関連する問題