El componente Service en Spring Boot

En este post vamos a entender que es un componente Service y como se crea en Spring Boot.

Que es un componente Service

En este otro artículo aprendimos sobre los los Componentes y los Estereotipos en Spring Boot
Alli entendimos que un @Service es un componente y un estereotipo de Spring que forma parte de ‘la capa de servicio’.

Un micro-servicio lo dividimos en capas siendo el service la capa intermedia con la lógica del negocio.

Spring Boot Controller

Entonces un componente ‘Service’ es el componente encargado de resolver la lógica de negocio dentro de nuestra aplicación. Si tenemos en nuestro servicio que gestionar, por ejemplo, un ‘usuario’ del sistema; será entonces el componente UserService el encargado de incorporar las funcionalidades en sus métodos.

¿Cómo creamos el componente Service?

Lo que debemos hacer es pensar las operaciones que necesitamos realizar sobre nuestro User y crear los métodos para tal fin. Para este ejemplo, pensaremos en las operaciones básicas para crear, modificar y buscar que denominamos CRUD.

CRUD es un acrónimo que refiere a las cuatro funciones mínimas sobre una entidad –> Create, Read, Update, Delete.

Anotamos la clase ‘UserService’ como @Service

@Service
public class UserService {

    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User create(User user) {
        return userRepository.save(user);
    }

    public User update(User user) {
        return userRepository.save(user);
    }

    public User change(User user) {
        return userRepository.save(user);
    }

    public boolean remove(long id) {
        if (userRepository.existsById(id)) {
            userRepository.deleteById(id);
            return true;
        } else {
            return false;
        }
    }

    public Optional<User> find(long id) {
        return userRepository.findById(id);
    }

}

Vemos nuestro service delega en otro componente, el Repository, el acceso directo a los datos. El detalle de este repository lo vemos en otro artículo.

Desde un controlador que creamos llamamos a las funcionalidades del servicio.

Para esto, levantamos nuestra aplicación. Lee este artículo donde explico como crear el main de una aplicacion en Spring Boot e iniciarlo.

gradlew booRun
@RestController
public class UserController {

    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping("/api/user/{id}")
    public User byId(@PathVariable("id") int id) {
        return userService.find(id).orElseThrow();
    }

    @PostMapping("/api/user/")
    public User create(@RequestBody User user) {
        return userService.create(user);
    }

    @PutMapping("/api/user/")
    public User update(@RequestBody User user) {
        return userService.update(user);
    }

    @PatchMapping("/api/user/")
    public User change(@RequestBody User user) {
        return userService.change(user);
    }

    @DeleteMapping("/api/user/{id}")
    public boolean delete(@PathVariable("id") int id) {
        return userService.remove(id);
    }

}

Creamos, buscamos y eliminamos un usuario desde el controller que llama al service.

Spring Boot Service from Controller

Conclusión

En este artículo aprendimos a crear un Service en SpringBoot y entendimos el proposito que tiene el componente @Service en una aplicación Rest.

If you wish to send me any corrections or suggestions, please contact me.
Thanks for your feedback :)

Ver también