When When I explored hibernate JPA implementation , I got the idea of working with hibernate and creation of data access layer for fetching and inserting data into and from data
Spring Data creates a Proxy for the interface and for each method tries different strategies for finding/creating an implementation of the method.
The methods of CrudRepository
are implemented in the SimpleJpaRepository for other methods objects get created based on annotations, parameter and return types and the method name which then get invoked by the proxy.
There is a wiki article about the basic concepts that might be helpful.