如果我们已经在使用componentScan批注,为什么需要EntityScan和EnableJpaRepositories批注?

问题描述

我已经在spring boot应用程序的主类中使用componentScan注释,但是如果我仅使用此注释,则在获取存储库引用时会出现问题。因此,为了克服这个问题,我在EntityScan中使用了EnableJpaRepositoriescomponentScan注释。

@EntityScan(basePackages={"com.gonkar.fleetms.models"})
@EnableJpaRepositories(basePackages={"com.gonkar.fleetms.repositories"})

所以我的问题是,为什么需要使用其他两个注释?如果我已经在使用componentScan。

解决方法

@ComponentScan注释用于为使用@Component@Controller / @RestController@Service@Repository注释的类创建bean。它将它们标记为已添加到Spring容器中(使它们有资格进行依赖注入并允许它们成为@Autowired)。

@EntityScan注释不会创建任何bean,它标识JPA持久性上下文应使用哪些类。

@EnableJpaRepositories注释用于从Spring Data接口创建存储库类。

这三个注释经常一起使用,但是它们负责不同的事情。