@EntityScan 和@ComponentScan 的区别

Difference between @EntityScan and @ComponentScan

我想了解这里的区别。我看到 class 已经用相同的包示例对它们进行了注释:

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

}

我了解与 API 文档的区别,但想详细了解。这是否也意味着 @ComponentScan 扫描的任何内容在 Spring 上下文中具有更广泛的可见性,而 @EntityScan 则没有。如果这样的话,使用带有 @ComponentScan 的某些属性应该足以满足在 JPA 上下文中绑定的需要,不是吗?

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

另一方面,据我所知,@EntityScan 不会创建 bean。它仅标识特定持久性上下文应使用哪些 classes。自 Spring 启动包含 JPA、MongoDB、neo4j、Cassandra 和 CouchBase 的 1.4。

为什么不合并?好吧,我不在Spring队,但既然它们有不同的含义,为什么要合并呢? @EntityScan应该主要用来扫描你的实体包,而@ComponentScan应该扫描所有包含Spring个bean的包,所以下面很可能是:

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

}

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