当前位置: 首页 > 网络应用技术

如何在春季使用事件

时间:2023-03-08 16:25:37 网络应用技术

  在本教程中,我们将讨论如何在春季使用事件。

  事件是框架中最容易被忽略的功能之一,但它也是最有用的功能之一。就像春季其他许多事物一样,该事件是ApplicationContext提供的功能之一。

  有一些简单的准则可供遵循:

  让我们创建一个简单的事件类 - 只是存储事件数据的占位符。

  在这种情况下,事件类包含一个字符串消息:

  让我们创建事件的发布者。发布者构建了事件对象,并将其发布给正在听的任何人。

  要发布事件,发布者可以简单地注入ApplicationEventPublisher并使用cuplianIshevent()API:

  另外,发布者类可以实现ApplicationEventPublisheraware接口,当应用程序启动时,该界面还将在应用程序中注入Event Epparterer。通常,更容易将@Autowire注入Publisher。

  从Spring Framework 4.2开始,ApplicateVentPublisher接口为publicishevent(Object Event)方法提供了新的重载,该方法接受任何对象作为事件。因此,春季事件不再需要扩展ApplicationEvent类。

  最后,让我们创建一个监视器。

  侦听器的唯一要求是bean,并实现了applicationListener接口:

  请注意,我们的自定义监视如何使用定制事件的通用类型进行参数化,这使得onapplicationevent()方法类型seaf。此还避免了必须检查对象是否是特定事件类的实例并将其转换。

  此外,如所讨论的(默认情况下,春季事件已同步),dostuffandpublishanevent()方法将阻止,直到所有听众都完成事件为止。

  在某些情况下,同步发布事件不是我们真正想要的 - 我们可能需要异步处理我们的事件。

  我们可以通过使用执行程序创建ApplicationEventMulticaster Bean来打开它。

  为了我们

  该事件,发布者和听众与以前相同,但是现在听众不会在单独的线程中处理异步。

  Spring本身已发布了各种使用的情况。

  这些事件为应用程序开发人员提供了一种选择,这些开发人员可以连接到应用程序的生命周期和上下文,并在需要的地方添加自己的自定义逻辑。

  这是聆听上下文刷新的快速示例:

  从春季4.2开始,事件监视器不需要是实现ApplicationListener接口的BEAN - 它可以通过@EventListener的任何托管公共方法注册:

  和以前一样,方法签名声明其使用的事件类型。

  默认情况下,侦听器被同步称为。

  您还可以在事件类型中使用通用信息来安排事件。

  让我们创建一种遗传类型。

  在我们的示例中,事件类包含任何内容和成功状态指标:

  请注意GenesisPringevent和CustomSpringevent之间的区别。我们现在可以灵活地发布任何事件,并且不再需要从ApplicationEvent扩展。

  让我们现在创建事件的监视器。

  我们可以像以前一样实现ApplicationListener接口来定义监视器:

  不幸的是,此定义要求我们从ApplicationEvent类中继承GenesisPringEvent。因此,对于本教程,让我们使用以前讨论过的评论驱动事件监视器。

  通过在@EventListener注释上定义布尔斯晶状体表达式,它也可以使事件监视器条件。

  在这种情况下,仅当成功调用GeneicsPringevent的字符串对象时,事件处理程序才会调用:

  }春季表达语言(SPEL)是一种强大的表达语言,在另一个教程中具有详细的介绍。

  事件发布者与上述相似。但是,由于类型擦除,我们需要发布一个事件来分析我们将要过滤的通用参数,例如GenetringsPringEvent扩展了GenericsPrineEvent。

  此外,还有一种用于发布事件的替代方法。如果我们从使用@EventListener注释的方法中返回非空价值,Spring Framework将通过返回多个新事件将此结果作为新事件发送给我们。作为事件处理到集合的结果,我们可以发布多个新事件。

  本节涉及使用 @ TransActionLeventListener。要了解有关交易管理的更多信息,请检查Spring和JPA Transactions。

  从Spring 4.2开始,该框架提供了一个新的 @ TransActionLeventListener注释,该注释是@EventListener的扩展名,它使事件的侦听器可以进入交易的某个阶段。

  可以绑定到以下交易阶段:

  这是交易事件监视器的快速示例:

  仅当事件生产者正在运行并且即将提交时,该监视器才被调用。

  如果没有交易,它将根本不会发送事件,除非我们通过将Fallbackexecution属性设置为真实。

  在这篇简短的文章中,我们介绍了春季处理事件的基本知识,包括创建一个简单的自定义事件,发布它,然后在侦听器中处理。

  我们还简要了解如何启用配置中事件的异步处理。

  然后,我们了解了Spring 4.2中引入的改进,例如对注释驱动器的监视,更好的通用支持和事件结合到交易阶段。

  像往常一样,可以在GitHub上获得本文提供的代码。这是一个基于Maven的项目,因此应该易于导入和运行。

  本文翻译回:春季事件|贝尔登