【问题标题】:Why don't we override the methods in Spring CRUD Repository为什么我们不覆盖 Spring CRUD Repository 中的方法
【发布时间】:2019-08-01 14:13:03
【问题描述】:

我正在研究 Spring 数据,我注意到的一件事是我们能够通过创建一个实现 CRUD 存储库的接口来执行 CRUD 操作,并且默认情况下,我们可以访问生成的 queieres 到db 通过方法名称。

我认为每当我们实现一个接口时,我们都需要为方法提供一个实现。那么,当我们使用从 CrudRepository 接口实现的接口时,为什么不覆盖任何东西呢?

【问题讨论】:

  • Spring Data 自动为您生成接口的实现——您不必自己编写。
  • 它是否在运行时生成。我在哪里可以找到它的实现?
  • 它是在运行时生成的,不是以源代码的形式生成的,可能是用Java的动态代理机制或者用cglib等字节码工程库生成的。所以没有实现的源代码可看。
  • @Jesper 听起来确实像是对我的回答
  • 如果您想查看 CRUD 存储库背后的代码。在CrudRepository<T, ID> 上做Ctrl + Click

标签: java spring spring-boot


【解决方案1】:

Spring Data 的目标之一是让数据库访问变得容易,无需手动编写大量样板代码。

传统上,开发人员在使用数据库时通常会做的事情之一是使用方法编写DAOs(数据库访问对象),其中每个方法都会执行特定的查询。此类方法通常是 boilerplate code - 简单、重复的代码,需要大量编写和维护,并且不包含任何业务逻辑。

当您使用 Spring Data 时,所有这些代码都会自动为您生成。您唯一需要做的就是在存储库接口中指定要执行的查询,然后 Spring Data 会解释方法名称的含义以自动生成为您执行查询的代码。

这可以为您节省大量时间,并极大地帮助您保持自己的代码简洁;它还有助于防止错误。

Spring Data repository 接口的实现是在运行时自动生成的。这不是通过生成已编译的源代码来完成的——在幕后 Spring Data 直接生成接口实现的字节码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 2011-07-09
    • 1970-01-01
    • 2018-05-02
    相关资源
    最近更新 更多