49

我试图理解这里的区别。我看到一个类已经用相同的包示例注释了它们:

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

}

我了解与 API 文档的区别,但想详细了解。这是否也意味着任何被扫描的东西在@ComponentScanSpring 上下文中都具有更广泛的可见性,而@EntityScan没有。如果是这样,使用一些属性@ComponentScan应该足以在 JPA 上下文中绑定,不是吗?

4

2 回答 2

67

@ComponentScan注解用于为每个用@Component, @Service, @Controller, @RestController, , ... 注解的类自动创建 bean @Repository,并将它们添加到 Spring 容器中(允许它们是@Autowired)。

@EntityScan另一方面,据我所知,它并没有创建 bean 。它仅标识特定持久性上下文应使用哪些类。从包含 JPA、MongoDB、neo4j、Cassandra 和 CouchBase 的 Spring boot 1.4 开始。

为什么不合并?好吧,我不是Spring团队的,但是既然它们有不同的含义,为什么要合并它们呢?@EntityScan应该主要用于扫描您的实体包,而应该@ComponentScan扫描所有包含 Spring bean 的包,因此很可能出现以下情况:

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

}
于 2016-08-11T12:44:10.447 回答
1

我们也可以使用@EntityScan外部 jar 来定义一些实体。

于 2020-05-15T15:15:33.280 回答