天天看點

Spring Data # EventPublishingRepositoryProxyPostProcessor

EventPublishingRepositoryProxyPostProcessor是RepositoryProxyPostProcessor的一個實作類,可以可以快速實作DDD中聚合根發送領域事件的功能;

AbstractAggregateRoot、AfterDomainEventPublication、DomainEvents

一個領域模型中需要實作兩個方法,一個是擷取事件的方法(可以是單個事件,也可以是事件數組),還有一個發送完事件之後的回調方法;

DomainEvents用來辨別在擷取事件的方法,AfterDomainEventPublication用來辨別回調方法;

注意點

public Object invoke(@SuppressWarnings("null") MethodInvocation invocation) throws Throwable {

  Object[] arguments = invocation.getArguments();
  Object result = invocation.proceed();

  if (!invocation.getMethod().getName().startsWith("save")) {
    return result;
  }

  Object eventSource = arguments.length == 1 ? arguments[0] : result;

  eventMethod.publishEventsFrom(eventSource, publisher);

  return result;
}