Lavoro da un po 'di tempo con il repository JPA Spring Data nel mio progetto e conosco i punti seguenti:
- Nelle interfacce del repository, possiamo aggiungere i metodi come
findByCustomerNameAndPhone()
(assumendocustomerName
ephone
sono campi nell'oggetto dominio). - Quindi, Spring fornisce l'implementazione implementando i metodi di interfaccia del repository di cui sopra in fase di runtime (durante l'esecuzione dell'applicazione).
Sono interessato a come è stato codificato e ho esaminato il codice sorgente e le API di Spring JPA, ma non sono riuscito a trovare risposte alle domande seguenti:
- In che modo la classe di implementazione del repository generata in fase di runtime e i metodi vengono implementati e inseriti?
- Spring Data JPA utilizza CGlib o qualsiasi libreria di manipolazione del bytecode per implementare i metodi e iniettare dinamicamente?
Potresti aiutarci con le domande di cui sopra e fornire anche la documentazione supportata?
@Repository
interfacce annotate in primo luogo? GuardandoRepositoryFactorySupport#getRepository()
mostra che prende la classe di interfaccia come parametro, quindi deve essere scoperto da qualche altra parte. In particolare, sto cercando di capire come trovare un'interfaccia annotata e generare automaticamente un bean proxy JDK che implementa l'interfaccia, molto simile a spring-data, ma per uno scopo specifico dell'applicazione non correlato ai repository.