Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何查看Spring Data MongoDB生成的存储库实现?_Mongodb_Repository_Spring Data_Spring Data Mongodb - Fatal编程技术网

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

如何查看Spring Data MongoDB生成的存储库实现?,mongodb,repository,spring-data,spring-data-mongodb,Mongodb,Repository,Spring Data,Spring Data Mongodb,Spring数据何时生成存储库的实现?在编译时还是运行时?我可以看到Spring数据生成的实现库实现吗?tl;博士 不,原因很简单:没有代码生成。该实现基于代理和方法拦截器,该拦截器将调用执行委派到正确的位置 细节 实际上,方法执行可以由3种类型的代码支持: 特定于商店的crudepository实现。查看名为Simple(Jpa | Mongo | Neo4 |…)存储库的类型(请参阅特定于Jpa的类型)。它们对crudepository和paging和sortingrepository中的所

Spring数据何时生成存储库的实现?在编译时还是运行时?我可以看到Spring数据生成的实现库实现吗?

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

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

  • 特定于商店的
    crudepository
    实现。查看名为
    Simple(Jpa | Mongo | Neo4 |…)存储库的类型
    (请参阅特定于Jpa的类型)。它们对
    crudepository
    paging和sortingrepository
    中的所有方法都有“真实”的实现

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

  • 自定义实现代码直接调用,也可以从
    QueryExecutorMethodInterceptor
    调用

  • 剩下的就是查询派生,它由两个主要部分组成:方法名解析和查询创建。对于前者,请查看
    PartTree
    。它接受一个方法名和一个基类型,并将返回一个已解析的类似AST的结构,或者在解析属性等失败时抛出一个异常


    后者在名为
    PartTree(Jpa | Mongo | Neo4j |…)查询的类中实现
    ,并委托其他组件实际创建特定于存储的查询。例如,对于JPA来说,有趣的部分可能位于
    JpaQueryCreator.PredicateBuilder.build()
    (请参阅)。

    恐怕这两条评论与问题完全无关。嗨,奥利弗,你能解释一下QueryExecutorMethodInterceptor是如何工作的吗?委托和调用是什么时候发生的?@xabhi-你可能想看看这个答案。