最新的稳定版本请使用 Spring Data Elasticsearch 5.3.1Spring中文文档

最新的稳定版本请使用 Spring Data Elasticsearch 5.3.1Spring中文文档

Spring Data 基础结构提供了用于在调用某些方法之前和之后修改实体的钩子。 这些所谓的实例提供了一种方便的方法来检查和修改回调样式的实体。
一个看起来很像一个专门的. 某些Spring Data模块发布允许修改给定实体的存储特定事件(例如)。在某些情况下,例如在使用不可变类型时,这些事件可能会导致麻烦。 此外,事件发布依赖于 .如果使用异步配置它,可能会导致不可预测的结果,因为事件处理可以分叉到 Thread 上。
EntityCallbackEntityCallbackApplicationListenerBeforeSaveEventApplicationEventMulticasterTaskExecutorSpring中文文档

实体回调提供具有同步和反应式 API 的集成点,以保证在处理链中定义明确的检查点按顺序执行,返回可能被修改的实体或反应式包装器类型。Spring中文文档

实体回调通常按 API 类型分隔。这种分离意味着同步 API 仅考虑同步实体回调,而反应式实现仅考虑反应式实体回调。Spring中文文档

Entity Callback API 已在 Spring Data Commons 2.2 中引入。这是应用实体修改的推荐方法。 在调用可能注册的实例之前,仍会发布特定于现有存储的实例。ApplicationEventsEntityCallbackSpring中文文档

Entity Callback API 已在 Spring Data Commons 2.2 中引入。这是应用实体修改的推荐方法。 在调用可能注册的实例之前,仍会发布特定于现有存储的实例。ApplicationEventsEntityCallbackSpring中文文档

实现实体回调

An 通过其泛型类型参数与其域类型直接关联。 每个Spring Data模块通常都附带一组涵盖实体生命周期的预定义接口。EntityCallbackEntityCallbackSpring中文文档

剖析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.
	 */
	(1)
	T onBeforeSave(T entity, (2)
		String collection); (3)
}
1 BeforeSaveCallback在保存实体之前要调用的特定方法。返回可能修改的实例。
2 实体在持久化之前。
3 许多特定于存储的参数,例如实体所保留到的集合
反应物的剖析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.
	 */
	(1)
	Publisher<T> onBeforeSave(T entity, (2)
		String collection); (3)
}
1 BeforeSaveCallback在保存实体之前,要在订阅时调用的特定方法。发出可能被修改的实例。
2 实体在持久化之前。
3 许多特定于存储的参数,例如实体所保留到的集合
可选的实体回调参数由实现 Spring Data 模块定义,并从 的调用站点推断出来。EntityCallback.callback()

实现适合您的应用程序需求的接口,如以下示例所示:Spring中文文档

BeforeSaveCallback
class DefaultingEntityCallback implements BeforeSaveCallback<Person>, Ordered {      (2)

	@Override
	public Object onBeforeSave(Person entity, String collection) {                   (1)

		if(collection == "user") {
		    return // ...
		}

		return // ...
	}

	@Override
	public int getOrder() {
		return 100;                                                                  (2)
	}
}
1 根据您的要求实现回调。
2 如果同一域类型存在多个实体回调,则可能会对实体回调进行排序。排序遵循最低优先级。
1 BeforeSaveCallback在保存实体之前要调用的特定方法。返回可能修改的实例。
2 实体在持久化之前。
3 许多特定于存储的参数,例如实体所保留到的集合
1 BeforeSaveCallback在保存实体之前,要在订阅时调用的特定方法。发出可能被修改的实例。
2 实体在持久化之前。
3 许多特定于存储的参数,例如实体所保留到的集合
可选的实体回调参数由实现 Spring Data 模块定义,并从 的调用站点推断出来。EntityCallback.callback()
1 根据您的要求实现回调。
2 如果同一域类型存在多个实体回调,则可能会对实体回调进行排序。排序遵循最低优先级。

注册实体回调

EntityCallback如果 Bean 在 . 大多数模板 API 已经实现,因此可以访问ApplicationContextApplicationContextAwareApplicationContextSpring中文文档

以下示例说明了有效实体回调注册的集合:Spring中文文档

Bean 注册示例EntityCallback
@Order(1)                                                           (1)
@Component
class First implements BeforeSaveCallback<Person> {

	@Override
	public Person onBeforeSave(Person person) {
		return // ...
	}
}

@Component
class DefaultingEntityCallback implements BeforeSaveCallback<Person>,
                                                           Ordered { (2)

	@Override
	public Object onBeforeSave(Person entity, String collection) {
		// ...
	}

	@Override
	public int getOrder() {
		return 100;                                                  (2)
	}
}

@Configuration
public class EntityCallbackConfiguration {

    @Bean
    BeforeSaveCallback<Person> unorderedLambdaReceiverCallback() {   (3)
        return (BeforeSaveCallback<Person>) it -> // ...
    }
}

@Component
class UserCallbacks implements BeforeConvertCallback<User>,
                                        BeforeSaveCallback<User> {   (4)

	@Override
	public Person onBeforeConvert(User user) {
		return // ...
	}

	@Override
	public Person onBeforeSave(User user) {
		return // ...
	}
}
1 BeforeSaveCallback从注释中接收其顺序。@Order
2 BeforeSaveCallback通过接口实现接收其订单。Ordered
3 BeforeSaveCallback使用 lambda 表达式。默认情况下无序,最后调用。请注意,由 lambda 表达式实现的回调不会公开类型信息,因此使用不可分配的实体调用这些信息会影响回调吞吐量。使用 or 为回调 Bean 启用类型筛选。classenum
4 将多个实体回调接口组合到单个实现类中。
1 BeforeSaveCallback从注释中接收其顺序。@Order
2 BeforeSaveCallback通过接口实现接收其订单。Ordered
3 BeforeSaveCallback使用 lambda 表达式。默认情况下无序,最后调用。请注意,由 lambda 表达式实现的回调不会公开类型信息,因此使用不可分配的实体调用这些信息会影响回调吞吐量。使用 or 为回调 Bean 启用类型筛选。classenum
4 将多个实体回调接口组合到单个实现类中。

存储特定 EntityCallbacks

Spring Data Elasticsearch 在内部使用 API 提供审计支持,并对以下回调做出反应:EntityCallbackSpring中文文档

表 1.支持的实体回调
回调 方法 描述 次序

反应式/BeforeConvertCallbackSpring中文文档

onBeforeConvert(T entity, IndexCoordinates index)Spring中文文档

在将域对象转换为 . 可以返回 或修改后的实体,然后进行转换。org.springframework.data.elasticsearch.core.document.DocumententitySpring中文文档

Ordered.LOWEST_PRECEDENCESpring中文文档

反应式/AfterLoadCallbackSpring中文文档

onAfterLoad(Document document, Class<T> type, IndexCoordinates indexCoordinates)Spring中文文档

在 Elasticsearch 的结果被读入 .org.springframework.data.elasticsearch.core.document.DocumentSpring中文文档

Ordered.LOWEST_PRECEDENCESpring中文文档

反应式/AfterConvertCallbackSpring中文文档

onAfterConvert(T entity, Document document, IndexCoordinates indexCoordinates)Spring中文文档

在从 Elasticsearch 读取结果数据时转换域对象后调用。org.springframework.data.elasticsearch.core.document.DocumentSpring中文文档

Ordered.LOWEST_PRECEDENCESpring中文文档

Reactive/AuditingEntityCallbackSpring中文文档

onBeforeConvert(Object entity, IndexCoordinates index)Spring中文文档

标记已创建修改的可审核实体Spring中文文档

100Spring中文文档

反应式/AfterSave回调Spring中文文档

T onAfterSave(T entity, IndexCoordinates index)Spring中文文档

在保存域对象后调用。Spring中文文档

Ordered.LOWEST_PRECEDENCESpring中文文档

表 1.支持的实体回调
回调 方法 描述 次序

反应式/BeforeConvertCallbackSpring中文文档

onBeforeConvert(T entity, IndexCoordinates index)Spring中文文档

在将域对象转换为 . 可以返回 或修改后的实体,然后进行转换。org.springframework.data.elasticsearch.core.document.DocumententitySpring中文文档

Ordered.LOWEST_PRECEDENCESpring中文文档

反应式/AfterLoadCallbackSpring中文文档

onAfterLoad(Document document, Class<T> type, IndexCoordinates indexCoordinates)Spring中文文档

在 Elasticsearch 的结果被读入 .org.springframework.data.elasticsearch.core.document.DocumentSpring中文文档

Ordered.LOWEST_PRECEDENCESpring中文文档

反应式/AfterConvertCallbackSpring中文文档

onAfterConvert(T entity, Document document, IndexCoordinates indexCoordinates)Spring中文文档

在从 Elasticsearch 读取结果数据时转换域对象后调用。org.springframework.data.elasticsearch.core.document.DocumentSpring中文文档

Ordered.LOWEST_PRECEDENCESpring中文文档

Reactive/AuditingEntityCallbackSpring中文文档

onBeforeConvert(Object entity, IndexCoordinates index)Spring中文文档

标记已创建修改的可审核实体Spring中文文档

100Spring中文文档

反应式/AfterSave回调Spring中文文档

T onAfterSave(T entity, IndexCoordinates index)Spring中文文档

在保存域对象后调用。Spring中文文档

Ordered.LOWEST_PRECEDENCESpring中文文档