La anotación @Service
en Spring Boot se utiliza para indicar que una clase representa un servicio en la lógica de negocio de la aplicación. Es una especialización de la anotación @Component
y se utiliza principalmente para organizar el código y dar un contexto semántico a las clases que contienen lógica de negocio. Los servicios generalmente coordinan las operaciones de los repositorios y otros componentes, proporcionando métodos que encapsulan procesos complejos.
@Service
es una anotación de Spring que se utiliza para marcar una clase como un servicio de negocio. Al igual que @Component
, permite que Spring detecte e instancie la clase como un bean dentro del contenedor de la aplicación. Sin embargo, @Service
tiene un propósito semántico adicional, ya que indica que la clase está destinada a contener lógica de negocio y separar esta lógica de otras capas, como los controladores y los repositorios.
Es una buena práctica usar @Service
para todas las clases que contienen reglas de negocio, cálculos complejos o procesos de coordinación entre diferentes fuentes de datos.
import org.springframework.stereotype.Service;
@Service
public class UsuarioServicio {
public String obtenerSaludoUsuario(String nombre) {
return "¡Hola, " + nombre + "! Bienvenido a la aplicación.";
}
}
En este ejemplo:
UsuarioServicio
se declara como un servicio utilizando @Service
.
obtenerSaludoUsuario
contiene la lógica de negocio para generar un mensaje de saludo personalizado.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UsuarioControlador {
private final UsuarioServicio usuarioServicio;
@Autowired
public UsuarioControlador(UsuarioServicio usuarioServicio) {
this.usuarioServicio = usuarioServicio;
}
@GetMapping("/saludo/{nombre}")
public String saludarUsuario(@PathVariable String nombre) {
return usuarioServicio.obtenerSaludoUsuario(nombre);
}
}
En este caso:
UsuarioControlador
inyecta la instancia del servicio UsuarioServicio
mediante el constructor.
/saludo/{nombre}
que utiliza la lógica del servicio para generar un saludo personalizado.
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class CalculadoraServicio {
public int sumar(List<Integer> numeros) {
return numeros.stream().reduce(0, Integer::sum);
}
}
Aquí, CalculadoraServicio
encapsula la lógica para sumar una lista de números, y esta lógica se puede reutilizar fácilmente en otros componentes de la aplicación.
Aunque @Service
es funcionalmente similar a @Component
, se recomienda usar @Service
para indicar explícitamente que la clase contiene lógica de negocio. Esto ayuda a la organización y comprensión del código, especialmente en proyectos grandes, donde los roles de cada clase deben estar claramente definidos.
Para más información, puedes consultar la documentación oficial de Spring.
Jorge García
Fullstack developer