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 wCrudRepositoryiPagingAndSortingRepository. -
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
).