web-dev-qa-db-ja.com

@ComponentScanまたは<context:component-scan />を1つのクラスのみで使用する

メインパッケージの2つのセットでプロジェクトを維持しています。プロジェクトはSpringとSpring MVCを使用しています。これらのパッケージの1つには複数のコントローラーが含まれ、XML構成(<context:component-scan />)。

問題は、他のパッケージに1つのクラス(スキャンされていない)があり、このクラスをスキャンする必要があることですが、このクラスのみがパッケージ内にあります。今では危険すぎるので、パッケージを変更することはできません。

annotationsまたはXMLを使用してこれを行う方法はありますか?

26
Shadi

単に追加するだけでBeanをコンテキストに追加できます。

<bean class="my.package.MyClass" />
21
Bart

@BartがXMLについて言ったこと。

アノテーションを使用してその1つのクラスをプルする必要がある場合は、@Configuration クラス

@ComponentScan(
    basePackageClasses = YourClass.class, 
    useDefaultFilters = false,
    includeFilters = {
        @ComponentScan.Filter(type = ASSIGNABLE_TYPE, value = YourClass.class)
    })
54

Emerson Farrugiaで説明されている方法に加えて、Spring Framework 4.2以降でサポートされている冗長性の低いソリューションがあります こちらのドキュメントで説明されているように

Spring Framework 4.2以降、@Importは、AnnotationConfigApplicationContext.registerメソッドに類似した、通常のコンポーネントクラスの参照もサポートします。これは、いくつかの構成クラスをエントリポイントとして使用してすべてのコンポーネントを明示的に定義することにより、コンポーネントのスキャンを回避する場合に特に便利です。

したがって、例は次のようになります。

@Import(YourClass.class)
2
Robert Hunt