Spring Data MongoDB生命周期事件

MongoDB 映射 framework 包含多个org.springframework.context.ApplicationEvent event,您的 application 可以通过在ApplicationContext中注册特殊的 beans 来对其进行响应。基于 Spring 的ApplicationContext事件基础结构,使其他产品(例如 Spring Integration)可以轻松接收这些 event,因为它们是 Spring-based applications 中众所周知的事件机制。

要在 object 进行转换 process(将您的域 object 转换为org.bson.Document)之前拦截它,您可以注册一个AbstractMongoEventListener的子类,该子类覆盖onBeforeConvert方法。调度 event 时,您的 listener 会被调用并在域 object 进入转换器之前传递给域 object。以下 example 显示了如何执行此操作:

public class BeforeConvertListener extends AbstractMongoEventListener<Person> {
  @Override
  public void onBeforeConvert(BeforeConvertEvent<Person> event) {
    ... does some auditing manipulation, set timestamps, whatever ...
  }
}

要在 object 进入数据库之前对其进行拦截,您可以注册一个org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener的子类,该子类将覆盖onBeforeSave方法。调度 event 时,将调用 listener 并将其传递给域 object 和转换后的com.mongodb.Document。以下 example 显示了如何执行此操作:

public class BeforeSaveListener extends AbstractMongoEventListener<Person> {
  @Override
  public void onBeforeSave(BeforeSaveEvent<Person> event) {
    … change values, delete them, whatever …
  }
}

在 Spring ApplicationContext 中声明这些 beans 会导致在调度 event 时调用它们。

AbstractMappingEventListener中存在以下回调方法:

  • onBeforeConvert:在 object 被MongoConverter转换为Document之前,在MongoTemplate insertinsertListsave操作中调用。

  • onBeforeSave:在将Document插入或保存在数据库中之前,请在MongoTemplate insertinsertListsave操作中调用。

  • onAfterSave:在**将Document插入或保存在数据库中之后,**在MongoTemplate insertinsertListsave操作中调用。

  • onAfterLoad:从数据库中检索Document后,在MongoTemplate findfindAndRemovefindOnegetCollection方法中调用。

  • onAfterConvert:从数据库中检索到Document后,在MongoTemplate findfindAndRemovefindOnegetCollection方法中调用被转换为 POJO。

仅针对根 level 类型发出生命周期 events。在文档根目录中用作 properties 的复杂类型不受 event 发布的约束,除非它们是用@DBRef注释的文档 references。

生命周期 events 取决于ApplicationEventMulticaster,在SimpleApplicationEventMulticaster的情况下可以使用TaskExecutor进行配置,因此无法保证在处理 Event 时。

摘自:https://www.docs4dev.com/

发表回复