1. ホーム

[解決済み】実行時にJavaアノテーションをスキャンする

2022-03-31 17:43:52

質問

アノテーションされたクラスをクラスパス全体から検索するにはどうすればよいですか?

私はライブラリーを作っていて、ユーザーがクラスにアノテーションを付けられるようにしたいのですが、ウェブアプリケーションの起動時に、特定のアノテーションについてクラスパス全体をスキャンする必要があります。

Java EE 5のWebサービスやEJBの新機能のようなものを考えています。クラスには、次のようなアノテーションを付けます。 @WebService または @EJB で、システムはロード中にこれらのクラスを見つけ、リモートでアクセスできるようにします。

解決方法は?

使用方法 org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider

API

ベースパッケージからクラスパスをスキャンするコンポーネントプロバイダ。そして、候補を見つけるために、結果のクラスに除外と包含のフィルタを適用します。

ClassPathScanningCandidateComponentProvider scanner =
new ClassPathScanningCandidateComponentProvider(<DO_YOU_WANT_TO_USE_DEFALT_FILTER>);

scanner.addIncludeFilter(new AnnotationTypeFilter(<TYPE_YOUR_ANNOTATION_HERE>.class));

for (BeanDefinition bd : scanner.findCandidateComponents(<TYPE_YOUR_BASE_PACKAGE_HERE>))
    System.out.println(bd.getBeanClassName());