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

时间:2014-05-09 11:17:10

标签: mongodb repository spring-data spring-data-mongodb

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

1 个答案:

答案 0 :(得分:14)

TL;博士

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

详细

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

  1. CrudRepository的商店特定实施。查看名为Simple(Jpa|Mongo|Neo4|…)Repository的类型(请参阅JPA特定的here)。他们有真实的" CrudRepositoryPagingAndSortingRepository中所有方法的实现。

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

  3. 直接调用自定义实现代码,也来自QueryExecutorMethodInterceptor
  4. 唯一剩下的是查询派生,它由两个主要部分组成:方法名称解析和查询创建。对于前者,请查看PartTree。它需要一个方法名称和一个基本类型,并将返回一个解析的类似AST的结构,或者如果它无法解析属性等,则抛出异常。

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