Oie Sergio, tudo bem contigo??
Antes de ir para diferença, vamos para a semelhança.
Como você mesmo percebeu, ambas as anotações funcionaram na mesma situação mas elas não seriam as únicas, tanto a @Component
quanto @Repository
também funcionariam nessa mesma situação. Isso acontece por conta da detecção automática de varredura e injeção de dependência do BeanValidation que considera essas 4 anotações iguais, por isso podemos usar uma no lugar da outra.
Agora para explicar a diferença vou focar apenas na @Service
x @Controller
, mas no final vou deixar um link para uma discussão muito boa que achei no qastack que explica muito bem todo esse tema.
@Controller:
- Indica que uma classe específica possui a função de um controlador. Esse anotação atua como um estereotipo para a classe aonde foi escrita, e indica sua função. Não podemos substituir essa anotação por outra como a
@Service
, a não ser que a classe já tenha sido registrada como "bean", usando o @Bean
e tiver sido definido o @RequestMapping
.
@Service
- Apenas mantêm a lógica de negócios e faz a chamada de métodos na camada de repositório.
Link para uma discussão desse tema no qastack.
Espero ter ajudado, qualquer coisa fico a disposição :)
Bons estudos!