@TargetSE(valueSE=TYPESE) @RetentionSE(valueSE=RUNTIMESE) @DocumentedSE public @interface Indexed
CandidateComponentsIndex
は、コンパイル時に生成されたメタデータファイルを使用するクラスパススキャンの代替手段です。インデックスにより、ステレオタイプに基づいて候補コンポーネント(つまり、完全修飾名)を取得できます。このアノテーションは、アノテーション付き要素が存在する要素にインデックスを付けるように、またはアノテーション付き要素を実装または拡張する場合にジェネレーターに指示します。ステレオタイプは、アノテーション付き要素の完全修飾名です。
このアノテーションでメタアノテーションが付けられたデフォルトの Component
アノテーションを検討してください。コンポーネントに Component
のアノテーションが付けられている場合、そのコンポーネントのエントリは org.springframework.stereotype.Component
ステレオタイプを使用してインデックスに追加されます。
このアノテーションは、メタアノテーションでも使用されます。このカスタムアノテーションについて考えてみましょう。
package com.example; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Indexed @Service public @interface PrivilegedService { ... }上記のアノテーションが型に存在する場合、2 つのステレオタイプ
org.springframework.stereotype.Component
および com.example.PrivilegedService
でインデックスが付けられます。Service
は Indexed
で直接アノテーションされていませんが、Component
でメタアノテーションされています。@Indexed
を追加することにより、特定のインターフェースのすべての実装または特定のクラスのすべてのサブクラスにインデックスを付けることもできます。この基本インターフェースを検討してください:
package com.example; @Indexed public interface AdminService { ... }ここで、この
AdminService
の実装をどこかで検討します。package com.example.foo; import com.example.AdminService; public class ConfigurationAdminService implements AdminService { ... }このクラスはインデックス付きのインターフェースを実装するため、
com.example.AdminService
ステレオタイプに自動的に含まれます。階層内により多くの @Indexed
インターフェースやスーパークラスがある場合、クラスはそれらのすべてのステレオタイプにマップされます。