web-dev-qa-db-ja.com

コンポーネントスキャンでサブパッケージがスキャンされない

奇妙な問題に遭遇しました。トップレベルのパッケージがスキャン用に指定されている場合、コンポーネントスキャンがサブパッケージを再帰的にスキャンしているように見えます。

私のリポジトリとエンティティは、プロジェクトの依存関係です。それらはパッケージ名com.foo.bar.xyzの下にあり、私のアプリケーション構成はパッケージcom.foo.barの下にあります。 _@EnableJpaRepositories_とともに@ComponentScan(basePackages = "com.foo.bar")を記述すると、リポジトリBeanが見つからないというエラーが発生します。

ただし、上記のコンポーネントスキャンとともに@EnableJpaRepositories(basePackages = com.foo.bar.xyz)のようなトップレベルのリポジトリパッケージを指定すると、リポジトリが正常に検出されます。

これは、リポジトリとエンティティがMavenの依存関係として挿入されているためにのみ発生していますか?では、コンポーネントの再帰的な部分は、サブパッケージまたはサブディレクトリをスキャンしますか?

10
Nikhil Sahu

これは、リポジトリとエンティティがMavenの依存関係として挿入されているためにのみ発生していますか?

  • いいえそうではありません

では、コンポーネントの再帰的な部分は、サブパッケージまたはサブディレクトリをスキャンしますか?

  • はい、コンポーネントスキャンはサブパッケージで再帰的に検索します

ここで詳しく説明すると、@ComponentScanは、@Componentまたは@Controllerのようなサブタイプを持つすべてのクラスを検索することを目的としていますが、PersistenceContextクラスに@EnableJpaRepositoriesアノテーションを付けてSpring Data JPAを有効にするSpring Data JPAがリポジトリー・インターフェースの実装を作成するときにスキャンされる基本パッケージを構成します。したがって、@ComponentScan@EnableJpaRepositoriesの両方の基本パッケージ情報を宣言する必要があります。

9
Mudassar