1. ホーム
  2. spring

[解決済み] Springの自動配線からサブパッケージを除外する?

2023-03-03 05:53:09

質問

Spring 3.1でパッケージ/サブパッケージの自動配線から除外する簡単な方法はありますか?

例えば、コンポーネントスキャンを、ベースパッケージが com.example を除外する簡単な方法はありますか? com.example.ignore ?

(なぜかというと、いくつかのコンポーネントを統合テストから除外したいからです)

どのように解決するのですか?

exclude-filter> で明示的にパッケージを除外できるかどうかは分かりませんが、正規表現フィルタを使えば効果的に除外できると思います。

 <context:component-scan base-package="com.example">
    <context:exclude-filter type="regex" expression="com\.example\.ignore\..*"/>
 </context:component-scan>

アノテーションベースにするには、統合テストから除外したい各クラスに @com.example.annotation.ExcludedFromITests のようなアノテーションを付けます。そうすると、component-scanは次のようになります。

 <context:component-scan base-package="com.example">
    <context:exclude-filter type="annotation" expression="com.example.annotation.ExcludedFromITests"/>
 </context:component-scan>

これで、ソースコード自体に、そのクラスが統合テスト用のアプリケーションコンテキストに含まれることを意図していないことを文書化したので、より明確になりましたね。