Juan Pablo Prado

Software Engineer

  • Home
  • About
  • Contact

Connect

  • Github
  • Linkedin
  • Twitter

Juan Pablo Prado © 2021

Spring Data REST – Eventos

octubre 17, 2016 By Juan Prado Leave a Comment

Hay ocho diferentes eventos que el exportador REST emite durante todo el proceso de trabajo con una entidad. Estos son:

  • BeforeCreateEvent
  • AfterCreateEvent
  • BeforeSaveEvent
  • AfterSaveEvent
  • BeforeLinkSaveEvent
  • AfterLinkSaveEvent
  • BeforeDeleteEvent
  • AfterDeleteEvent
package com.juanpabloprado.review;

import com.juanpabloprado.user.User;
import com.juanpabloprado.user.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.rest.core.annotation.HandleBeforeCreate;
import org.springframework.data.rest.core.annotation.RepositoryEventHandler;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;

@Component
@RepositoryEventHandler(Review.class)
public class ReviewEventHandler {
  private final UserRepository users;

  @Autowired
  public ReviewEventHandler(UserRepository users) {
    this.users = users;
  }

  @HandleBeforeCreate
  public void addReviewerBasedOnLoggedInUser(Review review) {
    String username = SecurityContextHolder.getContext().getAuthentication().getName();
    User user = users.findByUsername(username);
    review.setReviewer(user);
  }
}

Tenemos una clase ReviewEventHandler, con un nombre que explica la intención de la clase i.e. manejar los eventos de la entidad Review.

Para declarar un handler, crea un POJO y ponle la anotación @RepositoryEventHandler. Esto le dice al BeanPostProcessor que esta clase tiene que ser inspeccionada para encontrar métodos handler.

Ahora la anotación @Component es para que la aplicación tome en cuenta esta clase como un componente Spring, y sea recogida por @SpringBootApplication o @ComponentScan el cual escanea el classpath en busca de POJOS con anotaciones Spring dentro del paquete e.g. @Component @Repository, @Service, o @Controller

private final UserRepository users;

  @Autowired
  public ReviewEventHandler(UserRepository users) {
    this.users = users;
  }

Esta parte no es mas que inyección de dependencias, por medio de un argumento del constructor, para ello es necesario la anotación @Autowired en el constructor de nuestra clase.

Como en todo post llegamos al final… But show me the code!
Echale un vistazo al repo en GitHub. Y si quieres aprender Spring Data REST con Spring Boot hay un excelente curso en Treehouse, en el cual se basa mi código. 😀

Share this:

  • Click to share on Twitter (Opens in new window)
  • Click to share on Facebook (Opens in new window)
  • Click to share on Google+ (Opens in new window)

Filed Under: Uncategorized

Categorías

  • Uncategorized