Opa galera eu precisava de uma ajuda.
Eu gostaria de entender qual é a “magia” que o spring data faz para pegar a assinatura do método de uma interface e ao injetar essa interface tudo funciona como magica. exemplo tenho uma classe Objeto com uma field nome e se eu colocar findByNome ele já cria a query "select o from Objeto where o.nome = :nome"
Gostaria de intender a fundo como isso funciona.
Exatamente como é, não sei dizer, pois nunca vi os códigos, porém, creio que o spring utiliza um proxy para obter a instancia da interface que herda de Repository. Com o proxy, dá para interceptar as chamadas aos métodos e obter o nome do método. Com isso, já dá para imaginar como o resto é feito.
Veja um exemplo de proxy:
Proxy.newProxyInstance(iClazz.getClassLoader(),
new Class[]{ iClazz },
new YourInvocationHandler())
A classe YoutInvocationHandler
te permitirá interceptar as chamadas aos métodos.