Como os repositórios do Spring Data são realmente implementados?

Trabalho com o repositório Spring Data JPA em meu projeto há algum tempo e conheço os pontos abaixo:

Nas interfaces do repositório, podemos adicionar os métodos comofindByCustomerNameAndPhone() (assumindocustomerName ephone são campos no objeto de domínio).Em seguida, o Spring fornece a implementação implementando os métodos da interface do repositório acima em tempo de execução (durante a execução do aplicativo).

Estou interessado em saber como isso foi codificado e observei o código-fonte e as APIs do Spring JPA, mas não consegui encontrar respostas para as perguntas abaixo:

Como a classe de implementação do repositório é gerada no tempo de execução e nos métodos sendo implementada e injetada?O Spring Data JPA usa CGlib ou qualquer biblioteca de manipulação de bytecode para implementar os métodos e injetar dinamicamente?

Você poderia ajudar com as perguntas acima e também fornecer qualquer documentação suportada?

questionAnswers(1)

yourAnswerToTheQuestion