package luck.spring.jpa.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.context.ApplicationEvent;
import org.springframework.data.domain.AfterDomainEventPublication;
import org.springframework.data.domain.DomainEvents;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@Id
private Long id;
@Column(name = "name")
private String name;
/**
* 表示这是一个事件方法,当前Repository的save开头的接口方法被触发的时候,当前方法会被触发
* 有两种情况
* 1. 当Repository触发的方法参数只有一个,那么,使用Repository操作方法的参数作为事件发布
* 2. 当Repository方法有多个,或者没有,则使用返回值作为参数发布事件
* 如果参数或者返回值是集合的话,那么会循环发布事件,这个和事件发布机制一样
*/
@DomainEvents
public ApplicationEvent applicationEvent() {
return new ApplicationEvent(this) {
};
}
@DomainEvents
public User user() {
return this;
}
/**
* 在事件发布后,做的收尾操作,方法没有参数
*/
@AfterDomainEventPublication
public void call() {
System.out.println("OK");
}
}
SpringDataJPA中,@DomainEvents和@AfterDomainEventPublication注解的作用
于 2024-03-28 15:04:35 首次发布