Leí en línea, @Service es para la capa de servicio (lógica comercial), @Controller es para el punto final de la API y @Repository se usa para la capa de persistencia.
En mi empresa, la estructura del código es:
Client -> Rest endpoint -> service -> DAO -> database Lo que me confundió es que, en la capa DAO, se anota como @Service (en realidad, tanto el servicio como la capa DAO también se anotan como @Service )
¿Hay alguna razón por la que DAO anotó como @Service ? No pude preguntarle al programador porque está de baja.
Con las anotaciones @Component, @Repository, @Service y @Controller en su lugar y después de habilitar el escaneo automático de componentes, Spring importará automáticamente los beans al contenedor para que no tenga que definirlos explícitamente para autoconectarlos.
@Componente
La anotación @Component marca una clase Java como un bean para que el mecanismo de escaneo de componentes de Spring pueda recogerlo y colocarlo en el contexto de la aplicación. Para usar esta anotación, aplíquela sobre la clase como se muestra a continuación:
@Repositorio
Aunque el uso anterior de @Component es lo suficientemente bueno, puede usar una anotación más adecuada que brinde beneficios adicionales específicamente para DAO, es decir, la anotación @Repository. La anotación @Repository es una especialización de la anotación @Component con un uso y una funcionalidad similares. Además de importar los DAO al contenedor DI, también hace que las excepciones no verificadas (lanzadas desde los métodos DAO) sean elegibles para traducirse a Spring DataAccessException.
@Servicio
La anotación @Service también es una especialización de la anotación de componente. Actualmente no proporciona ningún comportamiento adicional sobre la anotación @Component, pero es una buena idea usar @Service sobre @Component en clases de capa de servicio porque especifica mejor la intención. Además, el soporte de herramientas y el comportamiento adicional podrían depender de él en el futuro.
@Controlador
La anotación @Controller marca una clase como un controlador Spring Web MVC. También es una especialización de @Component, por lo que los beans marcados con él se importan automáticamente al contenedor DI. Cuando agrega la anotación @Controller a una clase, puede usar otra anotación, es decir, @RequestMapping; para asignar direcciones URL a métodos de instancia de una clase.
En su escenario, no tiene impacto en el flujo de la aplicación si usa @Service o @Repository, la aplicación funcionará ya que son elegibles para el cableado automático. Pero la práctica estándar es usar @Repository para las clases de dao.