Как Spring генерирует реализацию интерфейса-репозитория?
Есть такой интерфейс:
public interface PersonRepository extends Repository<User, Long> {
List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);
// Enables the distinct flag for the query
List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);
// Enabling ignoring case for an individual property
List<Person> findByLastnameIgnoreCase(String lastname);
// Enabling ignoring case for all suitable properties
List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);
// Enabling static ORDER BY for a query
List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
List<Person> findByLastnameOrderByFirstnameDesc(String lastname);
}
Расскажите, пожалуйста, как Spring–у удаётся сгенерировать реализацию этого интерфейса при компиляции программы? В репозитории на Github я не смог найти эту логику, как это всё происходит. Желательно, подскажите справочники, с помощью которых я смогу создать что-то подобное — буду благодарен.