实现JpaRepository时不需要@Repository?

时间:2017-05-19 11:50:23

标签: java spring-boot

我的spring boot应用程序中有一个知识库类。首先,我使用 import jdatetime jalili_date = jdatetime.date(1396,2,30).togregorian() gregorian_date = jdatetime.date.fromgregorian(day=19,month=5,year=2017) 对其进行了注释,然后我实现了@Repository。现在我摆脱了注释,它仍然有效。

我看到JpaRepositoryJpaRepository注释。

这是如何工作的?或者这应该不起作用,我的应用程序中发生了什么奇怪的事情?

5 个答案:

答案 0 :(得分:10)

确实没有必要将@Repository注释放在扩展JpaRepository的接口上; Spring通过扩展其中一个预定义的Repository接口来识别存储库。

@NoRepositoryBean注释的目的是防止Spring将该特定接口本身视为存储库。 JpaRepository接口有这个注释,因为它本身不是一个存储库,它本来是由你自己的存储库接口扩展的,那些是应该被接收的。

  

或者这应该不起作用,我的应用程序中出现了一些奇怪的东西?

它可以正常工作,你的应用程序中没有任何奇怪的东西。

答案 1 :(得分:1)

我在猜你用@EnableJpaRepositories进行设置。这将扫描Spring Data repositories,即使它们未使用@Repository进行注释。

来自javadoc:

  

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

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

答案 2 :(得分:1)

不是强制性的。它将工作的原因是因为您将指定使用@EnableJpaRepositories("packagestoscan")

框架包来查找存储库

答案 3 :(得分:0)

我建议您使用@Repository类进行注释,例如:

@Repository
JpaRepositoryImpl implements JpaRepository 

答案 4 :(得分:0)

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