在实现JpaRepository时,是否需要@Repository?

35

我的Spring Boot应用程序中有一个存储库类。起初,我使用了@Repository注解,然后实现了JpaRepository。现在我摆脱了这个注解,它仍能正常工作。

我发现JpaRepository@NoRepositoryBean注解。

这是如何工作的?或者这不应该起作用,我的应用程序出了问题吗?


你在repositories配置中使用了@EnableJpaRepositories吗? - Zack Schulfler
5个回答

61

在继承JpaRepository接口的接口上放置@Repository注解并不是必需的;Spring通过这些接口扩展了预定义的Repository接口来识别存储库。

@NoRepositoryBean注解的目的是防止Spring将特定的接口视为存储库。因为JpaRepository接口本身并不是一个存储库,而是用于扩展自己的存储库接口,并且应该选择这些接口。

或者这样行不通,在我的应用程序中有一些奇怪的事情发生吗?

它按照预期工作,您的应用程序中没有任何奇怪的事情发生。


Spring Data JPA 的哪个 Repository 类带有 @Repository 注解? - raj240
@raj240 Spring提供的所有类和接口都没有@Repository注解。这个注解应该用于你自己定义的接口上。 - Jesper

7

这不是强制性的。之所以会起作用,是因为您已经使用 @EnableJpaRepositories("packagestoscan") 指定了框架要查找存储库的包。


好的,就这样了!谢谢! - user3813234
1
然而,这并不解释Spring如何知道一个存储库是一个存储库,而没有@Repository注释。 - eduvv

4
我猜您使用了@EnableJpaRepositories进行设置。即使没有使用@Repository注释,它也会扫描Spring Data repositories
从javadoc中可以看到:

启用JPA存储库的注释。默认情况下,将扫描注释配置类的包以查找Spring Data存储库。

您还可以指定basePackages/basePackageClasses来更改默认设置。

是的,就是这样!我仍然在为所有的注释而苦恼。 - user3813234

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

代码相关内容的翻译:其注释质量得到了解答。 - Mathews Sunny
发布后我意识到了。我的错误! - Farrukh Ahmed

2
我建议作为一种良好的实践,对你正在实现的类进行注释,例如使用 @Repository:
@Repository
JpaRepositoryImpl implements JpaRepository 

1
为什么呢?这毫无意义。 - Eugene

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接