我已经使用Spring Data JPA仓库在我的项目中工作了一段时间,我知道以下几点:
- 在仓库接口中,我们可以添加像
findByCustomerNameAndPhone()
这样的方法(假设customerName
和phone
是域对象中的字段)。 - 然后,Spring通过在运行时(应用程序运行期间)实现上述仓库接口方法来提供实现。
我对如何编写代码感兴趣,我看了Spring JPA源代码和API文档,但找不到以下问题的答案:
- 仓库实现类如何在运行时生成以及如何实现和注入方法?
- Spring Data JPA是否使用CGlib或任何字节码操作库动态实现方法并进行注入?
请帮我解决以上问题,并提供相关支持文档,谢谢!
@Repository
的接口吗?查看RepositoryFactorySupport#getRepository()
可以看到它需要将接口类作为参数,因此必须在其他地方发现接口。我尤其想知道如何找到带注释的接口并自动生成实现该接口的JDK代理Bean,这非常类似于Spring Data,但不是与存储库相关的应用特定目的。 - Chris RiceRepositoryComponentProvider
。没有自动化的事情发生,只有对某些类型(无论是带注释还是携带注释)进行组件扫描,并为每个类型配置了一个FactoryBean
。 - Oliver Drotbohm