アノテーションインターフェース ComponentScan
@Configuration
クラスで使用するコンポーネントスキャンディレクティブを構成します。Spring の <context:component-scan>
XML 名前空間要素と同等のサポートを提供します。
basePackageClasses()
または basePackages()
(またはその別名 value()
) を指定して、スキャンする特定のパッケージを定義できます。特定のパッケージが定義されていない場合、スキャンはこのアノテーションを宣言するクラスのパッケージから再帰的に実行されます。
<context:component-scan>
要素には annotation-config
属性がありますが、このアノテーションには属性がないことに注意してください。これは、@ComponentScan
を使用する場合、ほとんどの場合、デフォルトのアノテーション構成処理 (たとえば、@Autowired
および関連処理) が想定されるためです。さらに、AnnotationConfigApplicationContext
を使用する場合、アノテーション構成プロセッサーは常に登録されるため、@ComponentScan
レベルで無効にしようとすると無視されます。
使用例については、@Configuration
の Javadoc を参照してください。
@ComponentScan
は反復可能なSEアノテーションとして使用できます。@ComponentScan
は、属性オーバーライドを持つカスタム合成アノテーションを作成するためのメタアノテーションとしても使用できます。
ローカルで宣言された @ComponentScan
アノテーションは常に @ComponentScan
メタアノテーションよりも優先され、効果的に隠蔽されます。これにより、明示的なローカル設定でメタに存在する設定 ( @ComponentScan
でメタアノテーションが付けられた合成アノテーションを含む) をオーバーライドできるようになります。
- 導入:
- 3.1
- 作成者:
- Chris Beams, Juergen Hoeller, Sam Brannen
- 関連事項:
ネストされたクラスのサマリー
オプション要素のサマリー
修飾子と型オプションの要素説明ClassSE<?>[]
アノテーション付きコンポーネントをスキャンするパッケージを指定するための、basePackages()
の型安全な代替。StringSE[]
アノテーション付きコンポーネントをスキャンするベースパッケージ。コンポーネントのスキャンに適さない型を指定します。コンポーネントのスキャンに適格な型を指定します。boolean
スキャンされた Bean を遅延初期化用に登録するかどうかを指定します。ClassSE<? extends BeanNameGenerator>
Spring コンテナー内で検出されたコンポーネントの命名に使用されるBeanNameGenerator
クラス。コンポーネント検出に適格なクラスファイルを制御します。検出されたコンポーネントに対してプロキシを生成する必要があるかどうかを示します。これは、スコープをプロキシスタイルで使用する場合に必要になる可能性があります。ClassSE<? extends ScopeMetadataResolver>
検出されたコンポーネントの範囲を解決するために使用されるScopeMetadataResolver
。boolean
StringSE[]
basePackages()
のエイリアス。
要素の詳細
value
basePackages()
のエイリアス。他の属性が必要ない場合は、より簡潔なアノテーション宣言を許可します。— たとえば、
@ComponentScan(basePackages = "org.my.pkg")
ではなく@ComponentScan("org.my.pkg")
です。- デフォルト:
- {}
basePackages
アノテーション付きコンポーネントをスキャンするベースパッケージ。value()
は、この属性のエイリアスです(相互に排他的です)。文字列ベースのパッケージ名に代わる型安全な代替手段として
basePackageClasses()
を使用します。- デフォルト:
- {}
basePackageClasses
ClassSE<?>[] basePackageClassesアノテーション付きコンポーネントをスキャンするパッケージを指定するための、basePackages()
の型安全な代替。指定された各クラスのパッケージがスキャンされます。この属性によって参照される以外の目的を果たさない特別なノーオペレーションマーカークラスまたはインターフェースを各パッケージに作成することを検討してください。
- デフォルト:
- {}
nameGenerator
ClassSE<? extends BeanNameGenerator> nameGeneratorSpring コンテナー内で検出されたコンポーネントの命名に使用されるBeanNameGenerator
クラス。BeanNameGenerator
インターフェース自体のデフォルト値は、この@ComponentScan
アノテーションを処理するために使用されるスキャナーが、継承された Bean 名前ジェネレーター (デフォルトのAnnotationBeanNameGenerator
や、ブートストラップ時にアプリケーションコンテキストに提供されるカスタムインスタンスなど) を使用する必要があることを示します。- 関連事項:
- デフォルト:
- org.springframework.beans.factory.support.BeanNameGenerator.class
scopeResolver
ClassSE<? extends ScopeMetadataResolver> scopeResolver検出されたコンポーネントの範囲を解決するために使用されるScopeMetadataResolver
。- デフォルト:
- org.springframework.context.annotation.AnnotationScopeMetadataResolver.class
scopedProxy
ScopedProxyMode scopedProxy検出されたコンポーネントに対してプロキシを生成する必要があるかどうかを示します。これは、スコープをプロキシスタイルで使用する場合に必要になる可能性があります。デフォルトは、実際のスキャンの実行に使用されるコンポーネントスキャナーのデフォルトの動作に従います。
この属性を設定すると、
scopeResolver()
に設定された値がオーバーライドされることに注意してください。- デフォルト:
- DEFAULT
resourcePattern
StringSE resourcePatternコンポーネント検出に適格なクラスファイルを制御します。より柔軟なアプローチのために、
includeFilters()
およびexcludeFilters()
の使用を検討してください。- デフォルト:
- "**/*.class"
useDefaultFilters
boolean useDefaultFilters@Component
@Repository
、@Service
または@Controller
アノテーションが付けられたクラスの自動検出を有効にする必要があるかどうかを示します。- デフォルト:
- true
includeFilters
ComponentScan.Filter[] includeFiltersコンポーネントのスキャンに適格な型を指定します。basePackages()
のすべてから、指定されたフィルターに一致する基本パッケージのすべてに、候補コンポーネントのセットをさらに絞り込みます。これらのフィルターは、指定されている場合、デフォルトのフィルターに加えて適用されることに注意してください。デフォルトのフィルターに一致しない場合(つまり、
@Component
でアノテーションが付けられていない場合)でも、指定されたフィルターに一致する指定された基本パッケージのすべての型が含まれます。- デフォルト:
- {}
excludeFilters
ComponentScan.Filter[] excludeFiltersコンポーネントのスキャンに適さない型を指定します。- 関連事項:
- デフォルト:
- {}
lazyInit
boolean lazyInitスキャンされた Bean を遅延初期化用に登録するかどうかを指定します。デフォルトは
false
です。必要に応じて、これをtrue
に切り替えます。- 導入:
- 4.1
- デフォルト:
- false