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;
}