tl;dr
Nie, z bardzo prostego powodu:nie trwa generowanie kodu. Implementacja opiera się na serwerach proxy i interceptorze metod delegującym wykonania połączeń we właściwe miejsca.
Szczegóły
W efekcie wykonanie metody może być wspierane przez 3 rodzaje kodu:
-
Specyficzna dla sklepu implementacja
CrudRepository
. Spójrz na typy o nazwieSimple(Jpa|Mongo|Neo4|…)Repository
(zobacz konkretny JPA tutaj ). Mają "prawdziwe" implementacje dla wszystkich metod wCrudRepository
iPagingAndSortingRepository
. -
Metody zapytań są efektywnie wykonywane przez
QueryExecutorMethodInterceptor.doInvoke(…)
(patrz tutaj ). Jest to w zasadzie 3-etapowy proces, aby znaleźć cel delegowania i go wywołać. Rzeczywiste wykonanie odbywa się w klasach o nazwie(Jpa|Mongo|Neo4j…)QueryExecution
(zobacz ten przykład). -
Niestandardowy kod implementacji jest wywoływany bezpośrednio, również z
QueryExecutorMethodInterceptor
.
Pozostało tylko wyprowadzenie zapytania, które składa się z dwóch głównych części:parsowania nazw metod i tworzenia zapytań. W przypadku tych pierwszych spójrz na PartTree
. Pobiera nazwę metody i typ podstawowy i zwróci przeanalizowaną strukturę podobną do AST lub zgłosi wyjątek, jeśli nie uda się rozwiązać właściwości lub tym podobnych.
Ten ostatni jest zaimplementowany w klasach o nazwie PartTree(Jpa|Mongo|Neo4j|…)Query
i delegaci do dodatkowych komponentów do rzeczywistego tworzenia zapytania specyficznego dla sklepu. Np. dla JPA interesujące bity są prawdopodobnie w JpaQueryCreator.PredicateBuilder.build()
(patrz tutaj
).