原标题:Spring认证中国教育管理中心-Spring Data Elasticsearch教程五(Spring中国教育管理中心)
10. 实体回调
Spring Data 基础设施提供了在调用某些方法之前和之后修改实体的钩子。那些所谓EntityCallback的实例提供了一种方便的方式来检查和潜在地修改回调风格的实体。
AnEntityCallback看起来很像专门的ApplicationListener. BeforeSaveEvent一些 Spring Data 模块发布允许修改给定实体的存储特定事件(例如)。在某些情况下,例如在使用不可变类型时,这些事件可能会导致麻烦。此外,事件发布依赖于
ApplicationEventMulticaster. 如果使用异步配置TaskExecutor它可能会导致不可预测的结果,因为事件处理可以分叉到线程上。
实体回调提供具有同步和反应式 API 的集成点,以保证在处理链中定义明确的检查点按顺序执行,返回可能修改的实体或反应式包装器类型。
实体回调通常按 API 类型分隔。这种分离意味着同步 API 只考虑同步实体回调,而反应式实现只考虑反应式实体回调。
Spring Data Commons 2.2 引入了实体回调 API。这是应用实体修改的推荐方式。在调用可能注册的实例之前ApplicationEvents,仍会发布特定于现有商店的信息。EntityCallback
10.1实现实体回调
AnEntityCallback通过其泛型类型参数直接与其域类型相关联。每个 Spring Data 模块通常附带一组EntityCallback涵盖实体生命周期的预定义接口。
示例 89. 解剖学 EntityCallback
@FunctionalInterface
public interface BeforeSaveCallback<T> extends EntityCallback<T> {
/**
* Entity callback method invoked before a domain object is saved.
* Can return either the same or a modified instance.
*
* @return the domain object to be persisted.
*/
T onBeforeSave(T entity <2>, String collection <3>);
}
BeforeSaveCallback在保存实体之前调用的特定方法。返回一个可能修改过的实例。
在持久化之前的实体。
许多存储特定参数,例如实体持久保存到的集合。
示例 90. 反应式剖析 EntityCallback
@FunctionalInterface
public interface ReactiveBeforeSaveCallback<T> extends EntityCallback<T> {
/**
* Entity callback method invoked on subscription, before a domain object is saved.
* The returned Publisher can emit either the same or a modified instance.
*
* @return Publisher emitting the domain object to be persisted.
*/
Publisher<T> onBeforeSave(T entity <2>, String collection <3>);
}
BeforeSaveCallback在保存实体之前,在订阅时调用的特定方法。发出一个可能修改过的实例。