我的 Spring Boot 应用程序中有一个存储库类。首先,我用
@Repository
注释它,然后实现 JpaRepository
。现在我去掉了注释,它仍然有效。
我看到
JpaRepository
有 @NoRepositoryBean
注释。
这是如何运作的?或者这不起作用并且我的应用程序中发生了一些奇怪的事情?
确实没有必要在扩展
@Repository
的接口上添加JpaRepository
注解; Spring 通过扩展预定义的 Repository
接口之一来识别存储库。
@NoRepositoryBean
注解的目的是防止Spring将该特定接口本身视为存储库。 JpaRepository
接口具有此注释,因为它本身不是存储库,它旨在通过您自己的存储库接口进行扩展,而这些是应该选择的。
或者这不起作用并且我的应用程序中发生了一些奇怪的事情?
它按其应有的方式工作,并且您的应用程序中没有发生任何奇怪的事情。
这不是强制性的。它将起作用的原因是因为,您将指定框架包以使用
@EnableJpaRepositories("packagestoscan")
查找存储库
我猜你是用
@EnableJpaRepositories
设置的。即使它们没有用 Spring Data repositories
注释,这也会扫描 @Repository
。
来自javadoc:
启用 JPA 存储库的注释。默认情况下会扫描 Spring Data 存储库的带注释的配置类的包。
您还可以指定
basePackages
/basePackageClasses
来更改默认值。
使用 spring data jpa 时,不需要显式指定存储库。 spring data jpa 扫描扩展存储库的所有接口并自动生成实现。
我建议最好的做法是使用您正在实现的 @Repository 类进行注释:
@Repository
JpaRepositoryImpl implements JpaRepository