Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
领域事件实现
import java.io.Serializable;
import java.util.Date;
/**
* 领域事件
* Created by jiangwenkang on 16-11-17.
*/
public interface DomainEvent extends Serializable {
Date occurredTime();
}
import com.google.common.collect.Lists;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
/**
* 领域事件发布器
* Created by jiangwenkang on 16-11-17.
*/
public class DomainEventPublisher {
private static ConcurrentHashMap<Class<? extends DomainEvent>, List<DomainEventSubscriber<? extends DomainEvent>>> subscriberMap
= new ConcurrentHashMap<>();
public synchronized static <T extends DomainEvent> void subscribe(Class<T> domainEventClazz, DomainEventSubscriber<T> subscriber) {
List<DomainEventSubscriber<? extends DomainEvent>> domainEventSubscribers = subscriberMap.get(domainEventClazz);
if (domainEventSubscribers == null) {
domainEventSubscribers = Lists.newArrayList();
}
domainEventSubscribers.add(subscriber);
subscriberMap.put(domainEventClazz, domainEventSubscribers);
}
@SuppressWarnings("unchecked")
public static <T extends DomainEvent> void publish(final T domainEvent) {
if (domainEvent == null) {
throw new IllegalArgumentException("domain event is null");
}
List<DomainEventSubscriber<? extends DomainEvent>> subscribers = subscriberMap.get(domainEvent.getClass());
if (subscribers != null && !subscribers.isEmpty()) {
for (DomainEventSubscriber subscriber : subscribers) {
subscriber.handle(domainEvent);
}
}
}
}
/**
* 领域事件订阅器
* Created by jiangwenkang on 16-11-17.
*/
public interface DomainEventSubscriber<T extends DomainEvent> {
/**
* 订阅者处理事件
*
* @param event 领域事件
*/
void handle(T event);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment