@DomainEvents和@AfterDomainEventPublication註解使用及一點點點理解。
阿新 • • 發佈:2019-01-04
問題
剛才在讀Spring-data-mongodb的文件,讀到7.7的時候就發現了@DomainEvents
和@AfterDomainEventPublication
這麼兩個註解。
就看懂了最後一句每次呼叫Spring Data儲存庫的save(…)方法時,都會呼叫這些方法。哎,有意思,但是官方給的這個例子真的有點瞎。。自己試試吧。
試驗
一個使用者
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
private LocalDateTime createTime;
@DomainEvents
public List<Object> domainEvents() {
System.out.println("domainEvents什麼時候呼叫呢");
System.out.println(this);
return Stream.of(this).collect(Collectors.toList());
}
@AfterDomainEventPublication
public void callbackMethod() {
System.out.println("callbackMethod什麼時候呼叫呢");
}
//省略getter setter 構造 toString等
}
試了一下如果這兩個方法放在其他類裡面是不會觸發的,難道必須得放在模型裡面嗎。
測試save和saveAll方法
@Test
public void testSave() {
Customer customer = new Customer("a","a");
customerDao.save(customer);
}
@Test
public void testSaveAll() {
List<Customer> list = Stream.of(new Customer("b", "b"),
new Customer("c", "c")).collect(Collectors.toList());
customerDao.saveAll(list);
}
testSave()方法呼叫之後輸出
Hibernate: insert into t_customer (create_time, password, username) values (?, ?, ?)
domainEvents什麼時候呼叫呢
Customer{id=8, username='a', password='a', createTime=2018-06-08T18:22:11.665}
callbackMethod什麼時候呼叫呢
testSaveAll()方法呼叫之後輸出
Hibernate: insert into t_customer (create_time, password, username) values (?, ?, ?)
Hibernate: insert into t_customer (create_time, password, username) values (?, ?, ?)
domainEvents什麼時候呼叫呢
Customer{id=9, username='b', password='b', createTime=2018-06-08T18:23:15.853}
callbackMethod什麼時候呼叫呢
domainEvents什麼時候呼叫呢
Customer{id=10, username='c', password='c', createTime=2018-06-08T18:23:15.853}
callbackMethod什麼時候呼叫呢
結論
就如文件所說的那樣
@DomainEvents可以返回單個事件例項或事件集合
所有事件釋出後@AfterDomainEventPublication用於潛在地清理要釋出的事件列表
@DomainEvents用來發布時間,觸發機制在儲存的時候。
@AfterDomainEventPublication在事件釋出之後觸發。
有趣的一件事是@AfterDomainEventPublication只在@DomainEvents存在時才起作用。
具體怎麼使用有更理解的小夥伴分享一下。