@EntityScan和@ComponentScan之间的区别

时间:2016-08-11 12:27:58

标签: spring-boot spring-annotations spring-4 java-annotations

我试图了解这里的区别。我看到一个类已经使用相同的包示例进行了注释:

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

}

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

2 个答案:

答案 0 :(得分:38)

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

另一方面@EntityScan据我所知不会创建bean。它仅标识特定持久性上下文应使用哪些类。从Spring boot 1.4开始,包括JPA,MongoDB,neo4j,Casscandra和CouchBase。

为什么他们没有合并?好吧,我不是在Spring团队,但由于他们有不同的含义,他们为什么要合并? @EntityScan应主要用于扫描您的实体包,而@ComponentScan应扫描包含Spring bean的所有包,因此以下内容非常可能:

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

}

答案 1 :(得分:1)

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