建立抽象对象 TransactionalEvent
import org.hibernate.Session;
public abstract class TransactionalEvent {
private final Session session;
protected TransactionalEvent(Session session) {
this.session = session;
}
public Session getSession() {
return session;
}
}
建立监听
public interface TransactionalEventListener<T extends TransactionalEvent> {
void onEvent(T event);
Class<T> getSupportEventType();
}
建立发布事件
@Component
public class TransactionalEventPublisher {
private final List<TransactionalEventListener> listeners;
public TransactionalEventPublisher(List<TransactionalEventListener> listeners) {
this.listeners = listeners;
}
public void publish(TransactionalEvent event) {
for (TransactionalEventListener listener : listeners) {
if (listener.getSupportEventType() == event.getClass()) {
listener.onEvent(event);
}
}
}
}
实现:
@Override
public void update(Entity entity) {
TransactionalEventPublisher publisher = SpringContextUtil.getBean(TransactionalEventPublisher.class);
try {
publisher.publish(new newEvent(session, entity));
} catch (Throwable e) {
throw new RuntimeException(e);
}
super.update(entity);
}
public class newEvent extends TransactionalEvent {
private final Entity entity;
public newEvent(Session session, Entity entity) {
super(session);
this.entity = entity;
}
public newEvent getNewEvent() {
return entity;
}
}
@Component
public class EntityListener implements TransactionalEventListener<Entity> {
@Override
public void onEvent(Entity event) {
}
@Override
public Class<Entity> getSupportEventType() {
return Entity.class;
}
}