使用Spring应用程序事件发布有什么好处?

2022-09-04 07:15:20

我在一个使用一些Spring应用程序事件发布的Web应用程序上工作,我想知道它的优势是什么?为什么不直接为事件处理程序中发生的所有事情创建一个服务调用,然后调用该服务来代替发布事件呢?onApplicationEvent


答案 1

使用Spring的事件发布(观察者模式 - http://en.wikipedia.org/wiki/Observer_pattern)的一个优点是组件是松散耦合的 - 发布者和订阅者之间没有直接耦合。当然,它们都依赖于Spring Event API,但不依赖于彼此。这样就可以通过添加/删除订阅者来扩展应用程序,而不会影响其他订阅者(假设您的订阅者不相互依赖)。

另一方面,正如您可能已经发现的那样,它可能会使调试更加棘手,因为它在事件的源和整体结果之间引入了一定程度的间接关系。

是的,您通常可以将事件替换为直接 API 调用。在以下情况下使用事件很合适:

  • 将来发生事件时,您可能需要采取多个独立的操作
  • 处理需要传递给另一个线程以防止阻塞,例如发送电子邮件(使用自定义的 ApplicationEventMulticaster)。
  • 系统如何处理事件,例如AuthureFailureEvent,不依赖于侦听器的结果。
  • 您正在编写一个库,例如Spring Security,直接API调用不是一个选项。

答案 2

在回答问题的一部分时,为什么不创建一个服务呼叫;因为其他人已经编写了代码,记录并对其进行了测试。