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()
(вижте тук
).