@Override
 public void onPrepareCommit(
     UnitOfWork unitOfWork, Set<AggregateRoot> aggregateRoots, List<EventProxy> events) {
   if (hasPotentialConflicts()) {
     conflictResolver.resolveConflicts(asList(aggregate.getUncommittedEvents()), unseenEvents);
   }
 }
 /**
  * 执行真正的 保存 事件操作
  *
  * @param aggregate the aggregate to store
  */
 @Override
 protected void doSaveWithLock(T aggregate) {
   AggregateEventStream eventStream = aggregate.getUncommittedEvents();
   try {
     Iterator<EventStreamDecorator> iterator = eventStreamDecorators.descendingIterator();
     while (iterator.hasNext()) {
       eventStream =
           iterator.next().decorateForAppend(getTypeIdentifier(), aggregate, eventStream);
     }
     AggregateEventStore.appendEvents(getTypeIdentifier(), eventStream);
   } finally {
     IOUtils.closeQuietlyIfCloseable(eventStream);
   }
 }