Je travaille avec le référentiel Spring Data JPA dans mon projet depuis un certain temps et je connais les points ci-dessous:
- Dans les interfaces du référentiel, nous pouvons ajouter les méthodes comme
findByCustomerNameAndPhone()
(en supposant quecustomerName
etphone
sont des champs dans l'objet de domaine). - Ensuite, Spring fournit l'implémentation en implémentant les méthodes d'interface de référentiel ci-dessus au moment de l'exécution (pendant l'exécution de l'application).
Je suis intéressé par la façon dont cela a été codé et j'ai regardé le code source et les API Spring JPA, mais je n'ai pas pu trouver de réponses aux questions ci-dessous:
- Comment la classe d'implémentation du référentiel est-elle générée au moment de l'exécution et les méthodes sont-elles implémentées et injectées?
- Spring Data JPA utilise-t-il CGlib ou des bibliothèques de manipulation de bytecode pour implémenter les méthodes et injecter dynamiquement?
Pourriez-vous s'il vous plaît aider avec les requêtes ci-dessus et également fournir toute documentation prise en charge?
@Repository
interfaces annotées en premier lieu? En regardantRepositoryFactorySupport#getRepository()
montrer qu'elle prend la classe d'interface comme paramètre, elle doit donc être découverte ailleurs. J'essaie en particulier de comprendre comment trouver une interface annotée et générer automatiquement un bean proxy JDK qui implémente l'interface, un peu comme spring-data, mais dans un but spécifique à l'application non lié aux référentiels.