我在spring Data JPA参考文档中遇到了@DomainEvents和@AfterDomainEventsPublication批注。但我无法找到解释这些注释的完美例子
答案 0 :(得分:6)
您可以在EventPublishingRepositoryProxyPostProcessorUnitTests.java的GitHub存储库中查看Oliver Gierke对EventPublishingRepositoryProxyPostProcessor
Spring Data Commons的原始单元测试中的示例。
Spring Jira基本问题中的描述DATACMNS-928 Support for exposing domain events from aggregate roots as Spring application events对我有用。
<强>更新强>
这是Zoltan Altfatter的简单而真实的例子: Publishing domain events from aggregate roots
答案 1 :(得分:5)
这是我的示例代码:
package com.peaceelite.humanService;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import org.springframework.data.domain.AfterDomainEventPublication;
import org.springframework.data.domain.DomainEvents;
import java.util.*;
@Entity
public class SalesmanCustomerRelationship{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String firstName;
private String lastName;
/*getters & setters*/
@DomainEvents
Collection<Object> domainEvents() {
List<Object> result = new ArrayList<Object>();
result.add("Here should be an Event not a String, but, anyway");
return result;
}
@AfterDomainEventPublication
void callbackMethod() {
System.out.println("DATA SAVED!\n"+"WELL DONE");
}
}
这是一个由spring数据存储库管理的实体类。在执行CrudRepository.save()之后,@ DomainEvents和@AfterDomainEventPublication都会发生。有趣的是@AfterDomainEventPublication仅在@DomainEvents存在时起作用。
我也在学习Spring Data参考,这个问题和Dmitry Stolbov的回答对我帮助很大。