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