【问题标题】: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。

【讨论】:

    猜你喜欢
    • 2016-05-02
    • 2021-01-07
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2018-12-08
    • 2019-11-14
    • 2021-11-14
    • 2013-08-07
    相关资源
    最近更新 更多