@EntityScan 和 @ComponentScan 的区别
Posted
技术标签:
【中文标题】@EntityScan 和 @ComponentScan 的区别【英文标题】:Difference between @EntityScan and @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 org.springframework.boot.autoconfigure.domain.EntityScan 和 Spring org.springframework.context.annotation.ComponentScan 【参考方案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。
【讨论】:
以上是关于@EntityScan 和 @ComponentScan 的区别的主要内容,如果未能解决你的问题,请参考以下文章
ComponentScan 或 EntityScan 在另一个项目中找不到实体
Spring Boot 1.5.0-snapshot 上的 org.springframework.boot.orm.jpa.EntityScan
从'../components/App'导入应用程序有啥区别;和 var App = require('../components/App');?
5.8 Components — Composing Components(组合组件)