web-dev-qa-db-ja.com

@EntityScanと@ComponentScanの違い

ここで違いを理解しようとしています。クラスには同じパッケージの例で両方のアノテーションが付けられていることがわかります:

@Configuration
@EntityScan("some.known.persistence")
@ComponentScan({ "some.known.persistence"})
public class ApiConfig {

}

APIドキュメントとの違いは理解していますが、詳細に理解したいと思います。また、@ComponentScanによってスキャンされるものはすべて、Springコンテキストに対してより広い可視性を持ち、@EntityScanはそうではありません。そうであれば、@ComponentScanでいくつかの属性を使用すると、JPAコンテキストでバインドする必要が十分にあるはずです。

40
Raghuveer

@ComponentScan注釈は、@Component@Service@Controller@RestController@Repository、..の注釈が付けられたすべてのクラスのBeanを自動的に作成するために使用されます。 。そして、それらをSpringコンテナに追加します(@Autowiredにすることができます)。

一方、@EntityScanは、私の知る限りBeanを作成しません。特定の永続コンテキストで使用されるクラスのみを識別します。 JPA、MongoDB、neo4j、CassandraおよびCouchBaseを含むSpringブート1.4以降。

なぜ統合されないのですか?さて、私はSpringチームにはいませんが、それらは異なる意味を持っているので、なぜそれらをマージする必要がありますか? @EntityScanは主にエンティティパッケージのスキャンに使用する必要がありますが、@ComponentScanはSpring Beanを含むすべてのパッケージをスキャンする必要があるため、次の可能性が非常に高くなります。

@ComponentScan("org.example.base")
@EntityScan("org.example.base.entities")
public class MyConfig {

}
43
g00glen00b