ここで違いを理解しようとしています。クラスには同じパッケージの例で両方のアノテーションが付けられていることがわかります:
@Configuration
@EntityScan("some.known.persistence")
@ComponentScan({ "some.known.persistence"})
public class ApiConfig {
}
APIドキュメントとの違いは理解していますが、詳細に理解したいと思います。また、@ComponentScan
によってスキャンされるものはすべて、Springコンテキストに対してより広い可視性を持ち、@EntityScan
はそうではありません。そうであれば、@ComponentScan
でいくつかの属性を使用すると、JPAコンテキストでバインドする必要が十分にあるはずです。
@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 {
}