我试图了解这里的区别。我看到一个类已经使用相同的包示例进行了注释:
@Configuration
@EntityScan("some.known.persistence")
@ComponentScan({ "some.known.persistence"})
public class ApiConfig {
}
我理解与API文档的不同之处,但希望详细了解。这也意味着@ComponentScan
扫描的任何内容在Spring上下文中具有更广泛的可见性,而@EntityScan
则没有。如果这样使用@ComponentScan
的某个属性应该足以满足JPA上下文中的绑定需要,不是吗?
答案 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定义一些实体。