Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

@Controller ou @Service?

Em outro curso da Alura (Spring Data JPA) a solução apresentada usava classes denominadas de "Services" que continham a anotação @Service, ao invés de classes com a anotação @Controller deste curso. Até onde vai minha compreensão, as duas arquiteturas são a mesma (MVC - Model/View/Controller), embora lá o C de @Controller era implementada por @Services. Testei lá trocar a anotação de @Service para @Controller, e funcionou! Qual a diferença?

1 resposta
solução!

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!