如何查看Spring Data MongoDB生成的存储库实现?

xab*_*bhi 11 repository mongodb spring-data spring-data-mongodb

Spring Data生成的存储库实现是什么时候?在编译时还是运行时?我可以看到Spring Data生成的实现存储库实现吗?

Oli*_*ohm 15

TL;博士

不,原因很简单:没有代码生成.该实现基于代理和方法拦截器将调用执行委派给正确的位置.

细节

实际上,方法执行可以由3种类型的代码支持:

  1. 该商店的具体实施CrudRepository.查看已命名的类型Simple(Jpa|Mongo|Neo4|…)Repository(请参阅此处的JPA特定类型).他们对所有的方法"真实"的实施CrudRepositoryPagingAndSortingRepository.

  2. 查询方法有效地执行QueryExecutorMethodInterceptor.doInvoke(…)(见这里).它基本上是一个三步过程,用于查找委派目标并调用它.实际执行是在命名的类中完成的(Jpa|Mongo|Neo4j…)QueryExecution(例如,参见这个).

  3. 自定义实现代码也是直接调用的QueryExecutorMethodInterceptor.

唯一剩下的就是查询派生,它由两个主要部分组成:方法名称解析和查询创建.对于前者,请看一下PartTree.它需要一个方法名称和一个基本类型,并将返回一个解析的类似AST的结构,或者如果它无法解析属性等,则抛出异常.

后者在名为的类中实现,PartTree(Jpa|Mongo|Neo4j|…)Query并委托给其他组件以实际创建特定于商店的查询.例如,对于JPA,有趣的位可能在JpaQueryCreator.PredicateBuilder.build()(见这里).