Pracuję z repozytorium Spring Data JPA w swoim projekcie już od jakiegoś czasu i znam poniższe punkty:
- W interfejsach repozytorium możemy dodać metody takie jak
findByCustomerNameAndPhone()
(zakładająccustomerName
iphone
są pola w obiekcie domeny). - Następnie Spring zapewnia implementację poprzez implementację powyższych metod interfejsu repozytorium w czasie wykonywania (podczas uruchamiania aplikacji).
Interesuje mnie, jak to zostało zakodowane i przyjrzałem się kodowi źródłowemu Spring JPA i interfejsom API, ale nie mogłem znaleźć odpowiedzi na poniższe pytania:
- W jaki sposób klasa implementacji repozytorium jest generowana w czasie wykonywania i metody są wdrażane i wstrzykiwane?
- Czy Spring Data JPA używa CGlib lub jakichkolwiek bibliotek manipulujących kodem bajtowym do implementacji metod i dynamicznego wstrzykiwania?
Czy mógłbyś odpowiedzieć na powyższe pytania, a także dostarczyć jakąkolwiek obsługiwaną dokumentację?
@Repository
opisane interfejsy w pierwszej kolejności? Patrząc na,RepositoryFactorySupport#getRepository()
pokaż, że przyjmuje klasę interfejsu jako parametr, więc musi zostać znaleziona gdzie indziej. Szczególnie staram się dowiedzieć, jak znaleźć interfejs z adnotacjami i automatycznie wygenerować komponent bean proxy JDK, który implementuje interfejs, bardzo podobny do danych wiosennych, ale do celów specyficznych dla aplikacji, niezwiązanych z repozytoriami.