tl;dr
Не, поради много проста причина:не се генерира код. Внедряването се основава на прокси сървъри и прехващач на методи, делегиращи изпълнението на повикванията на правилните места.
Подробности
Ефективно изпълнението на метод може да бъде подкрепено от 3 вида код:
-
Специфичното за магазина изпълнение на
CrudRepository. Погледнете за типове с имеSimple(Jpa|Mongo|Neo4|…)Repository(вижте специфичния за JPA тук ). Те имат „истински“ реализации за всички методи вCrudRepositoryиPagingAndSortingRepository. -
Методите за заявки се изпълняват ефективно от
QueryExecutorMethodInterceptor.doInvoke(…)(вижте тук ). По същество това е процес от 3 стъпки за намиране на целта за делегиране и нейното извикване. Действителното изпълнение се извършва в класове, наречени(Jpa|Mongo|Neo4j…)QueryExecution(вижте този например). -
Персонализираният код за внедряване се извиква директно, също от
QueryExecutorMethodInterceptor.
Единственото останало нещо е извеждането на заявката, която се състои от две основни части:разбор на име на метод и създаване на заявка. За първото вижте PartTree . Той приема име на метод и базов тип и ще ви върне анализирана структура, подобна на AST, или ще хвърли изключение, ако не успее да разреши свойства или други подобни.
Последното е имплементирано в класове, наречени PartTree(Jpa|Mongo|Neo4j|…)Query и делегира допълнителни компоненти за действително създаване на конкретна заявка за магазина. напр. за JPA интересните битове вероятно са в JpaQueryCreator.PredicateBuilder.build() (вижте тук
).