实现JpaRepository时不需要@Repository吗?

问题描述 投票:0回答:5

我的 Spring Boot 应用程序中有一个存储库类。首先,我用

@Repository
注释它,然后实现
JpaRepository
。现在我去掉了注释,它仍然有效。

我看到

JpaRepository
@NoRepositoryBean
注释。

这是如何运作的?或者这不起作用并且我的应用程序中发生了一些奇怪的事情?

java spring-boot jparepository
5个回答
63
投票

确实没有必要在扩展

@Repository
的接口上添加
JpaRepository
注解; Spring 通过扩展预定义的
Repository
接口之一来识别存储库。

@NoRepositoryBean
注解的目的是防止Spring将该特定接口本身视为存储库。
JpaRepository
接口具有此注释,因为它本身不是存储库,它旨在通过您自己的存储库接口进行扩展,而这些是应该选择的。

或者这不起作用并且我的应用程序中发生了一些奇怪的事情?

它按其应有的方式工作,并且您的应用程序中没有发生任何奇怪的事情。


7
投票

这不是强制性的。它将起作用的原因是因为,您将指定框架包以使用

@EnableJpaRepositories("packagestoscan")

查找存储库

4
投票

我猜你是用

@EnableJpaRepositories
设置的。即使它们没有用
Spring Data repositories
注释,这也会扫描
@Repository

来自javadoc:

启用 JPA 存储库的注释。默认情况下会扫描 Spring Data 存储库的带注释的配置类的包。

您还可以指定

basePackages
/
basePackageClasses
来更改默认值。


4
投票

使用 spring data jpa 时,不需要显式指定存储库。 spring data jpa 扫描扩展存储库的所有接口并自动生成实现。


2
投票

我建议最好的做法是使用您正在实现的 @Repository 类进行注释:

@Repository
JpaRepositoryImpl implements JpaRepository 
© www.soinside.com 2019 - 2024. All rights reserved.