【问题标题】:Difference between @EntityScan and @ComponentScan@EntityScan 和 @ComponentScan 的区别
【发布时间】:2016-12-18 04:41:59
【问题描述】:
我想了解这里的区别。我看到一个类已经用相同的包示例注释了它们:
@Configuration
@EntityScan("some.known.persistence")
@ComponentScan({ "some.known.persistence"})
public class ApiConfig {
}
我了解与 API 文档的区别,但想详细了解。这是否也意味着 @ComponentScan 扫描的任何内容都具有更广泛的 Spring 上下文可见性,而 @EntityScan 没有。如果是这样,使用 @ComponentScan 的某些属性应该足以满足在 JPA 上下文中绑定的需要,不是吗?
【问题讨论】:
标签:
spring-boot
spring-annotations
spring-4
java-annotations
【解决方案1】:
@ComponentScan 注释用于自动为每个使用@Component、@Service、@Controller、@RestController、@Repository 注释的类创建 bean,并将它们添加到 Spring 容器中(允许他们成为@Autowired)。
据我所知,另一方面,@EntityScan 不会创建 bean。它仅标识特定持久性上下文应使用哪些类。从 Spring boot 1.4 开始,包括 JPA、MongoDB、neo4j、Cassandra 和 CouchBase。
为什么它们没有合并?好吧,我不是Spring团队的,但是既然它们有不同的含义,为什么要合并它们呢? @EntityScan 应该主要用于扫描你的实体包,而@ComponentScan 应该扫描所有包含 Spring bean 的包,所以很可能出现以下情况:
@ComponentScan("org.example.base")
@EntityScan("org.example.base.entities")
public class MyConfig {
}
【解决方案2】:
我们也可以使用@EntityScan来定义一些实体形式的外部jar。