我最近在Spring Framework中发现了事件处理,我想了解这个特定工具的功能和用例。
乍一看,他们看起来与Aspects非常相似,但也许我看不到大局。事件是AOP的替代品还是基于它?是否存在事件优于Aspects的用例?
答案 0 :(得分:2)
事件处理和方面的目的相似,但设计不同。一个不是另一个的替代品。我将在这里总结一些差异,但是你可以进一步探索这两个主题,以便看到差异。
AOP为我们提供了一种在代码中注入逻辑到连接点的方法。这意味着在这些点上执行相同逻辑的程序。 Spring具有强大的AOP工具,允许我们将代码注入应用程序的许多区域和执行点。
当某些内容影响应用程序上下文或处理请求时,事件处理为我们提供了一种通知侦听器的方法。因为听众正在执行逻辑,所以我们能够在应用程序的各个部分执行不同的逻辑。然而,与Aspects不同,“插入点”更受限制,因为它们只涉及HTTP请求或应用程序上下文。
从行为角度来看,Aspects and Events是 obposites 。当达到逻辑点时,方面注入一段代码。相反,一段代码在响应中执行到达到逻辑点。单个方面在整个应用程序中处理多次,而事件由任何数量的基于事件执行代码的侦听器处理。
一个方面可以与事件互换的唯一真实情况是在服务HTTPRequest时执行代码。该方面将在与服务方法相关的连接点处注入,而事件将由在请求被服务时得到通知的侦听器处理。
在我看来,AOP比听众模式更强大,但也不像动态。