2017-07-27 8 views
0

春春のデータ構成用のブートのサポートはorg.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupportにより、一般的であり、このクラスは、リポジトリをスキャンするためにパッケージ化するかを決定するために次のコードを使用しますので、なぜAutoConfigurationPackagesは@ComponentScanを考慮しないのですか?

AutoConfigurationPackages.get(this.beanFactory) 

、基本的に春ブーツと春データのみがどのパッケージをスキャン@EnableAutoConfigurationまたは@ImportAutoConfigurationが含まれていますが、@ComponentScanは考慮していませんが、これは正しいですか?

答えて

0

@ComponentScan注釈は、@Componentで注釈付けされたクラスを検索するための中心的なSpring Framework機能です。 Springのデータリポジトリはインタフェースであり(アノテートされていないため)、@ComponentScanアノテーションはそれらを取得しません。

Springブート以外でSpringデータを使用している場合は、属性を設定して@EnableJpaRepositoriesを使用してSpringデータリポジトリをスキャンできます。

通常、Spring Bootについては、@ComponentScanまたは@EnableJpaRepositoriesのいずれかを使用する必要はありません。 structure your code as suggestedの場合、コンポーネントとリポジトリの両方が取得されます。

元の質問に戻るにはAbstractRepositoryConfigurationSourceSupportです。 @SpringBootApplicationの出所を見ると、@ComponentScan@Componentsを見つける)と@AutoConfigurationPackage@EnableAutoConfigurationを介して)と注釈されていることがわかります。 @AutoConfigurationPackageは、後で検索される値でAutoConfigurationPackagesを設定します。

Springデータがリポジトリを検索する(たとえばテストで)パッケージをオーバーライドする場合は、自動構成を完全に無効にするには@EnableJpaRepositoriesを使用する必要があります。私は通常これをしませんが、代わりに@DataJpaTestを使用し、私の主な構成を拾う。

+0

ありがとうございます!私は、 '' @ AutoConfigurationPackage'''を使ってリポジトリに使うパッケージを指定できることに気付きました – beihaifeiwu

関連する問題