@EntityScan和@ComponentScan之间的区别

51

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

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

}

我理解API文档的差异,但想要详细了解。这是否意味着被@ComponentScan扫描到的任何内容都具有相对于Spring上下文更广泛的可见性,而@EntityScan则没有?如果是这样,那么在@ComponentScan中使用一些属性应该足以满足在JPA上下文中绑定的需求,不是吗?


2个回答

70

@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的某些实体。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接