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

时间:2011-03-08 23:02:30

标签: java spring events

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

3 个答案:

答案 0 :(得分:14)

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

另一方面,正如您可能已经发现的那样,它可以使调试变得更加棘手,因为它引入了事件源与总体结果之间的间接级别。

是的,您通常可以使用直接API调用替换事件。使用事件非常适合:

  • 您可能在将来需要在事件发生时采取多项独立行动
  • 需要将处理切换到另一个线程以防止阻塞,例如,发送电子邮件(使用自定义ApplicationEventMulticaster)。
  • 系统如何处理事件,例如AuthorizationFailureEvent,不依赖于监听器的结果。
  • 你正在写一个图书馆,例如Spring Security和直接API调用都不是一种选择。

答案 1 :(得分:2)

回答问题的一部分,询问为什么不创建服务电话;因为其他人已经编写了代码,记录并测试了它。

答案 2 :(得分:0)

基于事件的监听器的使用案例 -

  1. TDD变得非常方便(反过来会消除错误)

  2. 最适合单一责任模式(清洁代码)(参考链接 - https://www.youtube.com/watch?v=h8TWQM6fKNQ