@DomainEvents和@AfterDomainEventsPublication的示例

sat*_*n a 7 spring spring-data-jpa

我在spring Data JPA Reference Documentation中遇到了@DomainEvents和@AfterDomainEventsPublication批注.但我无法找到解释这些注释的完美例子

Dmi*_*bov 7

您可以在Spring Data Commons的 GitHub存储库中EventPublishingRepositoryProxyPostProcessor 看到 Oliver Gierke的EventPublishingRepositoryProxyPostProcessorUnitTests.java的原始单元测试中的 示例.

Spring Jira DATACMNS-928基本问题中的描述支持从聚合根公开域事件,因为Spring应用程序事件对我很有用.

UPDATE

这是Zoltan Altfatter的简单而真实的例子: 从聚合根发布域事件


Pet*_*mer 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");
}

}
Run Code Online (Sandbox Code Playgroud)

这是一个由spring数据存储库管理的实体类.在执行CrudRepository.save()之后,@ DomainEvents和@AfterDomainEventPublication都会发生.有趣的是@AfterDomainEventPublication仅在@DomainEvents存在时起作用.

我也在学习Spring Data参考,这个问题和Dmitry Stolbov的回答对我帮助很大.