1
resposta

@Component

Quando eu coloca a anotação @Service em um repositorio ou um @Repositorio em um Service ou um @Controller ou um @Component em qualquer uma das classes não tem diferença nenhuma, sempre funciona. Só existe a diferenciação de nomes só para ficar mais "LÉGIVEL" ? qual tipo de component que estou utilizando? Sei que o @Component indica que aquela classe vai ser gerenciada pelo spring. Uma outra dúvida e a seguinte : Como o Spring sabe quando é pra ele (no caso do repository) criar uma classe que instancia aquela interface e instanciar essa classe quando chamada pelo @Autowired e como ela sabe que é só pra criar uma instancia da propria classe como no caso do service?

1 resposta

Oi Victor,

Para o Spring todas as nossas classes que ele vai gerenciar são componentes, mas para melhorar a semântica, ao invés de utilizar @Component em tudo, podemos utilizar as outras anotações(@Service, @Repository, etc.). É mais uma questão de semântica mesmo, pois vai funcionar tudo igual.

Sobnre a segunda pergunta, isso dele criar uma classe que implementa a interface vai acontecer apenas para as interfaces repository. E ele sabe porque é uma interface que criamos, herdando das interfaces repository dele :)