@DomainEvents和@AfterDomainEventsPublication的示例

时间:2017-03-11 08:40:44

标签: spring spring-data-jpa

我在spring Data JPA参考文档中遇到了@DomainEvents和@AfterDomainEventsPublication批注。但我无法找到解释这些注释的完美例子

2 个答案:

答案 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的回答对我帮助很大。