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之前,在MongoTemplateinsert,insertList和save操作中调用。 -
onBeforeSave:在将Document插入或保存在数据库中之前,请在MongoTemplateinsert,insertList和save操作中调用。 -
onAfterSave:在**将Document插入或保存在数据库中之后,**在MongoTemplateinsert,insertList和save操作中调用。 -
onAfterLoad:从数据库中检索Document后,在MongoTemplatefind,findAndRemove,findOne和getCollection方法中调用。 -
onAfterConvert:从数据库中检索到Document后,在MongoTemplatefind,findAndRemove,findOne和getCollection方法中调用被转换为 POJO。
仅针对根 level 类型发出生命周期 events。在文档根目录中用作 properties 的复杂类型不受 event 发布的约束,除非它们是用
@DBRef注释的文档 references。
生命周期 events 取决于
ApplicationEventMulticaster,在SimpleApplicationEventMulticaster的情况下可以使用TaskExecutor进行配置,因此无法保证在处理 Event 时。
