sql >> データベース >  >> NoSQL >> MongoDB

Spring Data MongoDBによって生成されたリポジトリの実装を確認するにはどうすればよいですか?

    tl; dr

    いいえ、非常に単純な理由で、コード生成は行われていません。実装は、プロキシとメソッドインターセプターに基づいており、呼び出しの実行を適切な場所に委任します。

    詳細

    事実上、メソッドの実行は3種類のコードによって裏付けられます。

    1. CrudRepositoryのストア固有の実装 。 Simple(Jpa|Mongo|Neo4|…)Repositoryという名前のタイプを探してください (JPA固有のものここ )。 CrudRepositoryのすべてのメソッドに「実際の」実装があります。 およびPagingAndSortingRepository

    2. クエリメソッドは、QueryExecutorMethodInterceptor.doInvoke(…)によって効果的に実行されます。 (ここ )。基本的に、委任ターゲットを見つけて呼び出すのは3ステップのプロセスです。実際の実行は、(Jpa|Mongo|Neo4j…)QueryExecutionという名前のクラスで行われます。 (たとえば、これを参照してください)。

    3. カスタム実装コードは、QueryExecutorMethodInterceptorからも直接呼び出されます。 。

    残っているのはクエリの派生だけです。これは、メソッド名の解析とクエリの作成という2つの主要な部分で構成されています。前者については、PartTreeをご覧ください。 。メソッド名と基本タイプを受け取り、解析されたASTのような構造を返すか、プロパティなどの解決に失敗した場合は例外をスローします。

    後者は、PartTree(Jpa|Mongo|Neo4j|…)Queryという名前のクラスに実装されています。 ストア固有のクエリを実際に作成するための追加コンポーネントに委任します。例えば。 JPAの場合、興味深いビットはおそらくJpaQueryCreator.PredicateBuilder.build()にあります。 (ここ




    1. MapReduceのHadoopでのシャッフルと並べ替え

    2. 特定の日付のデータをダンプするにはどうすればよいですか

    3. NodeJSでのパスワードのリセット

    4. 既存のドキュメントに配列を挿入